1

登録 Jsp とサーブレットを作成しました。フォームを使用して値を挿入すると、値が挿入されず、いくつかの例外が Apache ログに表示されます。クエリまたは接続で実際のエラーを見つけるのを手伝ってくれますか????

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); 
    } 
}
4

2 に答える 2

2

クエリは次のようになる可能性が非常に高くなります。

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

または、このように (my_table にはまだ 3 つの列があります)

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

明らかに、列と同じ数の値を提供する必要があるため、これは機能しません。あなたのコメントから、私はそれが2番目のケースだと思います。既存の SQL ステートメントがあり、誰かがuserテーブルに列を追加/削除したため、この SQL ステートメントが無効になった

于 2012-07-27T15:44:33.720 に答える
1

挿入ステートメントで、指定した列の数が指定した値の数と同じではありません。

例えば

表 1 (A、B、C) の値 (100、1001、1002、1004) に挿入します。

=> 3 列 != 4 つの値。

于 2012-07-27T15:44:24.493 に答える