Using STR_TO_DATE in Java to INSERT Date, with PreparedStatement

空扰寡人 提交于 2019-12-25 02:24:07

问题


Let's suppose we have a JFrame called FrmRegistration. Its function is inserting data into a table called records.

MySQL's command desc records would result the following:

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | varchar(7)   | NO   | PRI |         |       | 
| name      | varchar(100) | NO   |     | NULL    |       | 
| birthday  | date         | NO   |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

Within FrmRegistration there's a JFormattedTextField for birthday input we'll call ftfBirthday. In Netbeans, we put names into components by right-clicking it and going to Properties -> Code tab -> Variable name. Or right-click -> Customize code -> Rename... button.

Right-click the field and go to Properties, then in FormatterFactory, click the "..." button. Create a customized field with: ####/##/##

The reason for a JFormattedTextField is that the user wouldn't lose time by typing the slashes. They appear automatically.

What should be done in the source-code of a button in FrmRegistration called Insert?


回答1:


Before going to the source-code, right-click the date field and go to Properties. Copy the content of text. It should be (a = one space):

aaaa/aa/aa

It will be used in the "} else if (" / / ".equals(birthday)) {" line.

(See the code for proper parameter)

I added some things extra, like checking if fields are empty.

    try {
                Class.forName("com.mysql.jdbc.Driver");

                try (Connection con = DriverManager.getConnection(

                                "jdbc:mysql://localhost/database_name_here",
                                "username_here", "password_here")) {

                    String if = txtId.getText();
                    String name = txtName.getText();
                    String birthday = ftfBirthday.getText();

                    PreparedStatement stmt = con.prepareStatement(

                            "INSERT INTO records "
                            + "(id, name, birthday)"
                            + "VALUES(?,?,STR_TO_DATE(?,'%Y/%m/%d'))");

                    if (id.isEmpty()) {
                        JOptionPane.showMessageDialog(null,
                                "The ID field must be completed!");

                    } else if (name.isEmpty()) {
                        JOptionPane.showMessageDialog(null,
                                "The Name field must be completed!");

                    } else if ("    /  /  ".equals(birthday)) {
                        JOptionPane.showMessageDialog(null,
                                "The Birthday field must be completed!");

                    } else {

                        stmt.setString(1, id);
                        stmt.setString(2, name);
                        stmt.setString(3, birthday);

                        stmt.executeUpdate();

                        JOptionPane.showMessageDialog(this, " Data was saved successfully! ");

                    }

                }

            } catch (SQLException e) {
                JOptionPane.showMessageDialog(this, "SQL command error "
                        + e.getMessage());

            } catch (ClassNotFoundException e) {
                JOptionPane.showMessageDialog(this,
                        " Database driver not found ");

        }

That's it. Hope it helps someone! :-)



来源:https://stackoverflow.com/questions/13390827/using-str-to-date-in-java-to-insert-date-with-preparedstatement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!