Как вставить тип (int) и (date)? - PullRequest
0 голосов
/ 18 июня 2020

Я хотел бы вставить идентификатор (int), заголовок (varchar), plot (varchar), release_date (date), target (varchar) в существующую базу данных.

Вот код, который вообще не показывает никаких данных.

Как я могу добавить значение типа даты в подключенную базу данных?

else if (e.getSource() == this.insert2) {

    String n = this.IDField.getInt();
    String m = this.titleField.getText();
    String f = this.plotField.getText();
    String p = this.release_dateField.getText();
    String t = this.targetField.getText();

    String[] name = {"MOVIE_ID","title","plot","release_date","main_target"};
    this.dt = new DefaultTableModel(name, 0);
    /**try~catch*/
    try{
        stmt.executeUpdate("insert into DB2020_MOVIEINFO values('" + n + "', '" + m + "', '" + f + "', '" + p + "', '" + t + "')");

        ResultSet rset_mv = stmt.executeQuery("SELECT * FROM DB2020_MOVIEINFO");
        while (rset_mv.next()) {
            Object[] data = {rset_mv.getString(1), rset_mv.getString(2), rset_mv.getString(3), rset_mv.getString(4), rset_mv.getString(5)};
            dt.addRow(data);
        }

    } 
    catch(SQLException se) {
        se.printStackTrace();
    }

    this.jt = new JTable(dt);
    jt.getTableHeader().setBackground(Color.decode("#b76e79"));
    jt.setSelectionBackground(Color.decode("#f7f6f0"));
    this.jsp = new JScrollPane(jt);
    jt.setPreferredScrollableViewportSize(new Dimension(800,600));
    this.add(centerPanel,BorderLayout.CENTER);
    this.centerPanel.removeAll();
    this.centerPanel.updateUI();
    this.centerPanel.add(jsp);
    this.centerPanel.setVisible(true);
}

новый код, который я применил после совета Мюрейника. (Я извлек часть даты)

 else if (e.getSource() == this.insert2) {


            Int id = this.IDField.getInt();
            String title = this.titleField.getText();
            String plot = this.plotField.getText();
            String target = this.targetField.getText();

            String[] name = {"MOVIE_ID","title","plot","main_target"};
            this.dt = new DefaultTableModel(name, 0);
            /**try~catch*/
            try (PreparedStatement ps = 
                     conn.prepareStatement("insert into DB2020_MOVIEINFO values(?, ?, ?, ?)") {
                    ps.setInt(1, id); // id should be an int
                    ps.setString(2, title);
                    ps.setString(3, plot);
                    ps.setString(4, target);
                }
            catch(SQLException se) {
                se.printStackTrace();
            }


            this.jt = new JTable(dt);
            jt.getTableHeader().setBackground(Color.decode("#b76e79"));
            jt.setSelectionBackground(Color.decode("#f7f6f0"));
            this.jsp = new JScrollPane(jt);
            jt.setPreferredScrollableViewportSize(new Dimension(800,600));
            this.add(centerPanel,BorderLayout.CENTER);
            this.centerPanel.removeAll();
            this.centerPanel.updateUI();
            this.centerPanel.add(jsp);
            this.centerPanel.setVisible(true);
        }

1 Ответ

3 голосов
/ 18 июня 2020

Вместо того, чтобы пытаться преобразовать эти типы данных в строки, вы можете использовать PreparedStatement и позволить драйверу JDB C сделать за вас тяжелую работу. В качестве побочного эффекта это также поможет защитить ваше приложение от SQL инъекционных атак:

try (PreparedStatement ps = 
     conn.prepareStatement("insert into DB2020_MOVIEINFO values(?, ?, ?, ?, ?)) {
    ps.setInt(1, id); // id should be an int
    ps.setString(2, title);
    ps.setString(3, plot);
    ps.setDate(4, releaseDate); // releaseDate should be java.sql.Date
    ps.setString(5, target);
}
...