列数与第1行的值计数不匹配JAVA mysql

参见英文答案 java.sql.SQLException: Column count doesn’t match value count at row 1 2个我遇到了一个错误,java.sql.SQLException:Column count doesnt match value co...

参见英文答案 > java.sql.SQLException: Column count doesn’t match value count at row 1                                    2个
我遇到了一个错误,java.sql.SQLException:

    Column count doesn't match value count at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)

这是非常令人沮丧的,因为我一直在修改代码,比如将arg更改为所有字符串,但错误仍然出现.

public void readDataBase(int val, String d1, String d2, String d3, String d4 ) throws     Exception {
try {
// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");
// Setup the connection with the DB
connect = DriverManager
.getConnection("jdbc:mysql://localhost/MAXdb?"+ "user=root&password=");

// Statements allow to issue SQL queries to the database
statement = connect.createStatement();
// Result set get the result of the SQL query       
   resultSet = statement
.executeQuery("select * from MAXdb.emcsg");
writeResultSet(resultSet);

// PreparedStatements can use variables and are more efficient
preparedStatement = connect
.prepareStatement("insert into  MAXdb.emcsg values (default,?, ?, ? , ?, ?)");
// Parameters start with 1

preparedStatement.setInt(1, val);
    preparedStatement.setString(2, d1);
preparedStatement.setString(3, d2);
preparedStatement.setString(4, d3);
preparedStatement.setString(5, d4);


preparedStatement.executeUpdate();

preparedStatement = connect
.prepareStatement("SELECT  id, Date, Time, Demand, SUPPLY from MAXdb.emcsg");
resultSet = preparedStatement.executeQuery();
writeResultSet(resultSet);



    } catch (Exception e) {
throw e;
} finally {
close();
}

}

我的第二堂课:

public void Csvreader() throws IOException {
try {
// TODO code application logic here

CSVReader reader = new CSVReader(new FileReader("D:/TEST.csv"));

String  nextLine[];
int i = 1;
Mysql sen = new Mysql();
while ((nextLine = reader.readNext()) != null) {
try {
sen.readDataBase( i, nextLine[0], nextLine[1], nextLine[2], nextLine[3] );
i = i+1;
} catch (Exception ex) {
Logger.getLogger(Opencsv.class.getName()).log(Level.SEVERE, null, ex);
}
}


} catch (FileNotFoundException ex) {
Logger.getLogger(Opencsv.class.getName()).log(Level.SEVERE, null, ex);
}

}

数据库:
    字段类型排序规则属性空默认额外操作
    id int(11)否无
    日期文本utf8_general_ci否无
    时间文字utf8_general_ci否无
    需求文字utf8_general_ci否无
    供应文本utf8_general_ci

解决方法:

好吧,我怀疑这是问题所在:

insert into  MAXdb.emcsg values (default,?, ?, ? , ?, ?)

您没有指定每个参数的哪个列要引用 – 我怀疑您没有6列.即使表中有6列,最好在SQL中明确说明您要为每个参数使用哪一列.

本文标题为:列数与第1行的值计数不匹配JAVA mysql

基础教程推荐