2

こんにちは、準備済みステートメントを使用してデータベースにデータを挿入しようとしていますが、構文エラーが発生しています。助けてください

public boolean SignUp(String last_name, String first_name,String email, String password,String confirm_password,String phone){



        Connect connect = new Connect();
        Connection conn = connect.Connection();

        java.sql.PreparedStatement preparedStatement = null;
        //NULL is the column for auto increment
        String insertQuery = "INSERT INTO users VALUES (NULL, ?, ?, ?, ?, ?, ?)";
        preparedStatement = conn.prepareStatement(insertQuery);
        preparedStatement.setString(1, last_name);
        preparedStatement.setString(2, first_name);
        preparedStatement.setString(3, email);
        preparedStatement.setString(4, password);
        preparedStatement.setString(5, confirm_password);
        preparedStatement.setString(6, phone);

        int rs = preparedStatement.executeUpdate(insertQuery);

        conn.close();

}

ここにエラーメッセージがあります

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?)' at line 1
4

3 に答える 3

5

私は答えを見つけました:)

executeUpdate(sql) の代わりに PreparedStatement.execute() を使用してください。既に sql と params を設定しています。executeUpdate(sql) の新しい設定はバインドをオーバーライドします。

于 2012-10-09T23:29:04.103 に答える
2

ステートメントを変更して列を明示的にNULLリストし、値のリストから削除する必要があります。

String insertQuery = "INSERT INTO users"
+  " (last_name, first_name, email, password, confirm_password, phone)"
+  " VALUES(?,?,?,?,?,?)";

このようにして、挿入ステートメントはテーブル内の列の順序に依存しなくなり、usersテーブルへの列の追加の影響も受けなくなります。

この設計はおもちゃや教育システムにはおそらく問題ありませんが、実際の本番システムでは、パスワードをテーブルに保存することは非常に危険であることに注意してください。保存confirm_passwordもかなり珍しいものです。通常、システムpasswordはと同じものをチェックしてconfirm_passwordから、ソルトされたパスワードハッシュとソルトをテーブルに挿入します。

于 2012-07-26T17:55:20.353 に答える
0

ただの推測です。確かではありません。しかし、フィールドの 1 つが自動インクリメントである場合、それを挿入する必要はないと思います。そのNULLを取り出してみてください....

于 2012-07-26T17:57:33.807 に答える