2016-09-08 3 views
1

Для целей тестирования я создал форму с 2 jTextFields, кнопкой и таблицей. Я пытаюсь добавить данные в базу данных. Но я, похоже, столкнулся с проблемой. Когда я нажимаю кнопку, он возвращает сообщение об ошибке, потому что данные не были добавлены в базу данных. Буду признателен за любую помощь. Итак, вот что я делаю. Я создал класс ConnectionConfiguration для упрощения кода:Добавление данных в базу данных MySQL

public class ConnectionConfiguration { 
    public static Connection getConnection() { 
    Connection connection = null; 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     System.out.println("Connection Success"); 
    } catch(ClassNotFoundException e) { 
     System.out.println("Connection Failed"); 
    } 
    try { 
     connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/systemnew?zeroDateTimeBehavior=convertToNull", "root","123456"); 
     System.out.println("Database Connected"); 
    } catch (SQLException se){ 
     System.out.println("No Database" + se); 
    } 
    return connection; 
    } 
} 

Соединение всегда успешно и база данных всегда соединяется. Сообщение об ошибке говорится, что моя ошибка здесь (в systemnew.UpdateDatabase.add) метод добавить .Здесь от класса UpdateDatabase:

public boolean add(String field1, String field2) { 
    try { 
     Connection conn = ConnectionConfiguration.getConnection(); 
     PreparedStatement ps = conn.prepareStatement("INSERT INTO newtable(field1,field2) VALUES('"+field1+"','"+field2+"')"); 
     ps.executeUpdate(); 
     return true; 
    } catch(Exception ex){ 
     ex.printStackTrace(); 
    } 
    return false; 
} 

и вот код для кнопки, которая должна потенциально добавить данные в базу данных:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    if(new UpdateDatabase().add(jTextField1.getText(),jTextField2.getText())){ 
     JOptionPane.showMessageDialog(null, "Added successfully!"); 
    } else { 
     JOptionPane.showMessageDialog(null, "Record has not been added!"); 
    } 
} 

ошибка

Connection Success 
Database Connected 
java.sql.SQLException: Field 'tblid' doesn't have a default value 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) 
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073) 
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009) 
    at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5098) 
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994) 
    at systemnew.UpdateDatabase.add(UpdateDatabase.java:38) 
+1

опубликовано сообщение об ошибке – sidgate

+0

@sidgate http://pastebin.com/raw/WZwdh5xz Строка "at systemnew.UpdateDatabase.add (UpdateDatabase.java:38)". –

ответ

0

ошибка указывает конкретный вопрос

java.sql.SQLException: Field 'tblid' doesn't have a default value 

Ваш стол newtable, кажется, имеет нулевой номер tblid, для которого вы не указываете какое-либо значение во время вставки. Вы можете пометить его как auto increment

+0

Кажется, у меня самое большое видение туннеля. Благодарю. –

1

В вас таблице newtable есть поле, называемое tblid, который вы не присваивать значения, так что вы получите следующую ошибку

Поле «tblid» не имеет значение по умолчанию

КСТАТИ было бы безопаснее использовать PreparedStatement для того, чтобы избежать возможных SQL Injection

Также рассмотрим этот answer, чтобы узнать об автоматическом приращении полей id

+0

Спасибо вам тоже. Если я могу спросить, где я не использую PreparedStatement? –

+0

Жаль, что вы - мой плохой. Попробуйте использовать сменные параметры '?', А затем 'setString' и т. Д. –

+0

вы имеете в виду что-то вроде этого? PreparedStatement ps = conn.prepareStatement ("INSERT INTO newtable (field1, field2) VALUES (?,?)"); ps.setString (1, textField.getText()); и т.д. –

Смежные вопросы