【问题标题】:Adding data to MySQL database将数据添加到 MySQL 数据库
【发布时间】:2017-01-15 19:06:32
【问题描述】:

出于测试目的,我创建了一个包含 2 个 jTextField、按钮和表格的表单。我正在尝试将数据添加到数据库。但我似乎遇到了问题。当我按下按钮时,它返回失败消息,因为数据尚未添加到数据库中。我会很感激任何帮助。所以这就是我正在做的事情。我创建了 ConnectionConfiguration 类来简化代码:

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 类的 add 方法:

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)

【问题讨论】:

  • 发布完整的错误信息
  • @sidgate pastebin.com/raw/WZwdh5xz Line "at systemnew.UpdateDatabase.add(UpdateDatabase.java:38)" 被选中。

标签: java mysql


【解决方案1】:

在您的表 newtable 中有一个名为 tblid 的字段,您没有为其分配值,因此您会收到以下错误

字段 'tblid' 没有默认值

顺便说一句,使用PreparedStatement 会更安全,以避免可能的 Sql 注入

也可以考虑answer 来了解自动递增的 id 字段

【讨论】:

  • 也谢谢你。如果我可能会问,我在哪里没有使用 PreparedStatement?
  • 对不起,我的错。尝试使用可替换参数? 然后setString 等。
  • 你的意思是这样的? PreparedStatement ps = conn.prepareStatement("INSERT INTO newtable(field1,field2) VALUES(?,?)"); ps.setString(1,textField.getText());等
  • 是的,看起来不错。也许想修剪你的 getText 值
【解决方案2】:

错误说明具体问题

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

您的表 newtable 似乎有非空的 tblid 列,您在插入期间没有为其指定任何值。您可能想将其标记为auto increment

【讨论】:

  • 我似乎拥有最大的隧道视野。谢谢。
猜你喜欢
  • 2017-07-14
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多