0

我在将数据从我的 GUI 传递到 MySQL 数据库时遇到问题。我正在从JTextFields 和JDateChooser, 收集信息到数据库中。除日期外,其他一切都有效。我尝试了多种在网上找到的方法,但都没有奏效。我还检查了该表,以确保在我的“患者信息”表中启用了“日期”数据类型。如果我删除 JDateChooser,我的查询就有效。否则,我将收到此错误消息:

Java.lang.NullPointerException

我在此消息中包含了我的源代码。

//Event handler adds records
//to the database

JButton subInfoBtn = new JButton("SUBMIT AND CONTINUE");

subInfoBtn.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {

            try {
                //Invokes "javaconnect" class
                //to link to MySQL database
                conn = javaconnect.ConnecrDb();

                //Invokes SQL Statement from "Connection" Object
                pst = conn.createStatement();

                //SQL query commands event handler to access
                //"patientinfo" table, to insert data to columns.
                pst.executeUpdate("INSERT into patientinfo(firstName, lastName, DOB, age, SSN, "
                                  + "address, phone,email, emergencycontact, emergencyphone) "
                                  + "VALUES" + "('"+firstTxt.getText() + "', '" + lastTxt.getText()
                                  + "', '" + DOBTxt.getDate() + "' ,'" + ageTxt.getText() + "', '"
                                  + ssnTxt.getText() + "', "+ " '" + addressTxt.getText() +"',
                                  '"+phoneTxt.getText()+"'  , '"+emailTxt.getText()+"'  ,
                                  '"+emergencyTxt.getText()+"'  , '"+emergPhoneTxt.getText()+"'  )");


                //Closes Database Connection
                conn.close();
                JOptionPane.showMessageDialog(null, "Pantient Information Saved Succesfully");

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

    subInfoBtn.setFont(new Font("Tahoma", Font.BOLD, 14));
    subInfoBtn.setBounds(305, 286, 220, 23);
    contentPane.add(subInfoBtn);

//Also, I have tried to use SimpleDateFormat and
//((JTextField)jDateChooser1.getDateEditor().getUiComponent()).getText();
//Without any luck.  I am also aware of using Prepare Statement to avoid SQL injections, but
//I would like to solve the JDateChooser bonding data dilema into MySQL database.
4

2 回答 2

1
java.sql.Date date = new java.sql.Date(dateChooser.getDate().getTime());

转换Date为 sql 对象,然后存储在数据库中。希望它会奏效。

于 2014-09-06T04:48:02.547 回答
1

尝试这样的事情将您正在输入的 java.util.Date 转换为 java.sql.Date 以将其存储到 Mysql 数据库,因为 mysql 以格式存储 Dateyyyy-MM-dd

public static java.sql.Date convertUtilDateToSqlDate(java.util.Date date){
    if(date != null) {
        java.sql.Date sqlDate = new java.sql.Date(date.getTime());
        return sqlDate;
    }
    return null;
}

然后按照他的方式做

PreparedStatement statement = conn.prepareStatement("INSERT INTO patientinfo"+
                                     "(firstName, lastName, DOB, age, SSN, address," +
                                     "phone,email, emergencycontact, emergencyphone)"+
                                     "VALUES(?,?,?,?,?,?,?,?,?,?)");
statement.setTimestamp(1,sqlDate);
statement.setString(1,firstTxt.getText());
statement.setString(2,lastTxt.getText());
statement.setDate(3,convertUtilDateToSqlDate(DOBTxt.getDate()));
statement.setString(4,ageTxt.getText());
statement.setString(5,ssnTxt.getText());
statement.setString(6,addressTxt.getText());
statement.setString(7,phoneTxt.getText());
statement.setString(8,emailTxt.getText());
statement.setString(9,emergencyTxt.getText());
statement.setString(10,emergPhoneTxt.getText());
int i = statement.executeUpdate();
if(i>0){
    System.out.println("Successfull");
 }

我希望你会做必要的异常处理和连接关闭

于 2014-09-06T07:24:36.593 回答