无法将值插入数据库

时间:2012-07-27 15:41:13

标签: java jsp servlets

我创建了注册Jsp和Servlet。当我使用表单插入值时,未插入值以及Apache Log.Can上的一些异常任何人帮我查找实际Error.in我的查询或连接??? ?

Jul 27, 2012 9:00:30 PM com.asiahospital.db.DataPersistor registerUser
SEVERE: null
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:2618)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:842)
    at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:681)
    at com.example.db.DataPersistor.registerUser(DataPersistor.java:29)
    at com.example.servlet.RegistrationServlet.doPost(RegistrationServlet.java:40)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at [...]

违规方法:

public void registerUser(User user) { 
    try { 
        Statement stmt = con.createStatement(); 
        String query = "INSERT INTO user VALUES ('" + user.getUserName()+ "','" 
            + user.getPassword() + "','" + user.getFirstName() + "','"
            + user.getLastName() + "','" + user.getEmail() + "','false')"; 
        stmt.execute(query); 
    } catch (SQLException ex) { 
        Logger.getLogger(DataPersistor.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}

2 个答案:

答案 0 :(得分:2)

您的查询很可能如下所示:

INSERT INTO my_table(A, B, C) VALUES ('a', 'b')

或者像这样(my_table仍然有三列)

INSERT INTO my_table VALUES ('a', 'b')

很明显,这不起作用,因为你必须提供尽可能多的值作为列。根据你的评论,我怀疑这是第二种情况。您有一个预先存在的SQL语句,有人添加/删除了user表中的列,导致此SQL语句无效

答案 1 :(得分:1)

在insert语句中,您提供的列数与您指定的值数不同。

e.g。

插入表1(A,B,C)值(100,1001,1002,1004)。

=> 3列!= 4个值。