将JXDatePicker中的日期添加到Netbeans中的SQL数据库中

时间:2016-01-25 20:10:20

标签: java sql database jdbc datepicker

我想将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。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的问题是,您尝试将Date值(或String表示形式)嵌入INSERT语句中。您应该通过PreparedStatement使用参数化SQL ,而不是将变量连接到查询文字中。除了保护代码免受SQL injection的影响外,参数化语句还可以被数据库重用,这意味着DB在每次执行之前都不需要解析SQL - 如果你这样做,这一点尤其重要# 39;在循环中重新运行大量查询。

您应该关注的另一件事是关闭您已打开的资源。在您的示例代码中,ConnectionStatement在不再需要后保持打开状态。这很容易使用Java 7中引入的try-with-resources statement来修复。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);
}