[英]how to display date chosen from java JXDatePicker and how to stored into database?
[英]Add date from JXDatePicker into SQL Database in Netbeans
我想将JXDatePicker中的日期值添加到我的SQL数据库中,但是运行它时出现此错误:
java.sql.sqldataexception:日期时间值的字符串表示形式的语法不正确
这是我的代码:
try {
String url = "jdbc:derby://localhost:1527/Members";
String username = "admin1";
String password = "admin1";
Connection con = DriverManager.getConnection(url, username, password);
Statement stmt = con.createStatement();
String query = "INSERT INTO BOOKING(MEMBERID, NAME, CONTACT, "
+ "EMAILADDRESS, RESERVATIONDATE, RESERVATIONTIME) "
+ "VALUES('"+txtMemberID.getText()+"', '"+txtName.getText()+"', "
+ "'"+txtContact.getText()+"', '"+txtEmail.getText()+"', "
+ "'"+comboDate.getDate()+"', '"+comboTime.getSelectedItem()+"')";
stmt.execute(query);
JOptionPane.showMessageDialog(null, "Booking created");
txtMemberID.setText(null);
txtName.setText(null);
txtContact.setText(null);
txtEmail.setText(null);
comboDate.setDate(null);
comboTime.setSelectedItem("00");
}
catch(SQLException ex) {
JOptionPane.showMessageDialog(null, ex.toString());
}
在数据库中为Date属性指定的数据类型为Date。
谢谢。
您的问题是您试图将Date
值(或一个的String
表示形式)嵌入INSERT
语句。 代替将变量连接到查询文字中,您应该通过PreparedStatement
使用参数化的SQL 。 除了保护代码不被SQL注入外 ,参数化的语句还可以由数据库重用,这意味着DB不需要在每次执行前解析SQL -如果您要运行大量的代码,这尤其重要循环查询。
您需要注意的另一件事是关闭您打开的资源。 在您的示例代码中,不再需要Connection
和Statement
之后将它们保持打开状态。 使用Java 7中引入的try-with-resources语句很容易解决此问题。在执行该语句后,将自动关闭try
子句中声明的资源。
综上所述,这是修改后的代码的示例:
String query = "INSERT INTO BOOKING(MEMBERID, NAME, CONTACT, "
+ "EMAILADDRESS, RESERVATIONDATE, RESERVATIONTIME) "
+ "VALUES(?, ?, ?, ?, ?, ?)";
try (Connection con = DriverManager.getConnection(url, username, password);
PreparedStatement ps = con.prepareStatement(query)) {
ps.setString(1, txtMemberID.getText());
ps.setString(2, txtName.getText());
ps.setString(3, txtContact.getText());
ps.setString(4, txtEmail.getText());
ps.setDate(5, new java.sql.Date(comboDate.getDate().getTime()));
ps.setString(6, comboTime.getSelectedItem().toString());
ps.executeUpdate();
JOptionPane.showMessageDialog(null, "Booking created");
/*clear the UI components etc.*/
} catch(SQLException ex) {
JOptionPane.showMessageDialog(null, ex.toString(), JOptionPane.ERROR_MESSAGE);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.