插入具有自动增量列的行

时间:2017-02-06 13:27:34

标签: java mysql jdbc

我的表有ID列,它是主键并自动递增, 我正在尝试使用java(jdbc)这样插入一行

Class.forName("com.mysql.jdbc.Driver");
            Connection con1=DriverManager.getConnection("jdbc:mysql://localhost:3309/ikpems","root","system");
            Statement st1=con1.createStatement();
            st1.execute("insert into energymetersdata values('20_lab5a_daicel_20_kwh','06-02-2017 12:02:13','8422587','1','42772501540.0694')");

但我收到了错误:

java.sql.SQLException: Column count doesn't match value count at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)

任何人都可以帮我解决这个问题..

2 个答案:

答案 0 :(得分:1)

当您使用insert时,您应始终明确列出所有列(除非您确实知道自己在做什么):

insert into energymetersdata(col1, col2, col3, col4, col5)
    values('20_lab5a_daicel_20_kwh', '06-02-2017 12:02:13', '8422587', '1', '42772501540.0694')");

您还应该将日期时间设置为ISO标准格式,并且无需引用数字值进入数字列:

insert into energymetersdata(col1, col2, col3, col4, col5)
    values('20_lab5a_daicel_20_kwh', '2016-02-06 12:02:13', 8422587, 1, 42772501540.0694)");

最后,你可以做你想做的事,即使我强烈反对它:

insert into energymetersdata
    values(DEFAULT, '20_lab5a_daicel_20_kwh', '2016-02-06 12:02:13', 8422587, 1, 42772501540.0694)");

但正确的方法是:

  • 列出要插入的列。
  • 格式化日期/时间值,使其明确无误。
  • 保持常量的类型与列的类型相似。

答案 1 :(得分:-1)

尝试更改您的Query_String,如

String Query_String = "INSERT INTO tablename(field1,field2) VALUES ('"+Text1+"','"+Text2+"')";