2013-12-21 46 views
0

我想将这些数据保存到oracle数据库中,但是(成员开始日期和成员结束日期)给出了一个错误我正在使用datepicker从JPallet for date和preparedstatemet允许我在pst.setString(6,startdate.getDate ()); int或字符串。请帮我解决这个问题。我会非常感谢你。Oracle preparedstatement

错误行:

pst.setString(6, startdate.getDate()); 
    pst.setString(7, enddate.getDate()); 

全部方法:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    con = javadb.ConnectDb(); 

    try{ 
     String sql = "insert into membertable(id,name,membershipno,department,idno," 
       + "startdate,enddate,officeaddress,officephone,homeaddress,homephone,dateofbirth," 
       + "fieldofinterest,remarks) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; 
     pst = (OraclePreparedStatement) con.prepareStatement(sql); 
     pst.setString(1, null); 
     pst.setString(2, name.getText()); 
     pst.setString(3, membershipno.getText()); 
     pst.setString(4, department.getText()); 
     pst.setString(5, idno.getText()); 
     pst.setString(6, startdate.getDate()); 
     pst.setString(7, enddate.getDate()); 
     pst.setString(8, officeaddress.getText()); 
     pst.setString(9, officephone.getText()); 
     pst.setString(10, homeaddress.getText()); 
     pst.setString(11, homephone.getText()); 
     pst.setString(12, dateofbirth.getText()); 
     pst.setString(13, fieldofinterest.getText()); 
     pst.setString(14, remarks.getText()); 

     pst.executeUpdate(); 

     JOptionPane.showMessageDialog(null, "Book added successfully!"); 

    }catch(SQLException e){ 
     JOptionPane.showMessageDialog(null, e); 
    } 
    update_table(); 

}    

和日期选择器代码是在这里

private void startdateActionPerformed(java.awt.event.ActionEvent evt) {           

}  

这是不是文本字段等于是我面临的问题。我想纠正,也不想改变它,因为它是前端需求。因为用户不想手动插入日期。谢谢。

+0

你不能只是做一个'setString'如果你的数据库字段是一个日期。应该有一个类似的'pst.setDate()'方法可以使用。 – Marc

+0

@Marc我正在使用pst.setDATE(7,enddate.getDate());这也给我错误,我的数据库字段是日期。 –

+0

我使用的是JDatePicker,它的formate是Sun 12/22/2013,但不知道oracle的存储日期格式是什么。 –

回答

1

插入日期时,请勿使用pst.setString()。相反,你应该使用pst.setDate()(这实际上是首先使用PreparedStatements的全部观点)。因为setString正在插入具有某种未知格式的日期字符串。 setDate告诉数据库预期日期,并且没有必要的日期格式转换。

此外,要做到这一点,你需要使用java.sql.Date而不是(我假设你的调色板返回)java.util.Date

所以这

pst.setString(6, startdate.getDate()); 
pst.setString(7, enddate.getDate()); 

应该是这样的

pst.setDate(6, new java.sql.Date(startdate.getDate().getTime())); 
pst.setDate(7, new java.sql.Date(enddate.getDate().getTime())); 
+1

Man you are good ...其实最好!谢谢......帽子!您真的专注于数据驱动的ERP解决方案。 –

+0

您应该使用'PreparedStatement'中的setter进行探索。像'setInt','setDate'等等。当你插入一个varchar /文本字段时,只能使用'setString'。 – ryvantage