1

私は次のようなSQLテーブルを持っていますsysuser

id (pk) email password role

テーブルに値を挿入したいのですが。私は次のデータを取得しますArrayList<String>

cell 0 no value,
cell 1 ID,
cell 2 email,
cell 3 password,
cell 4 role,

これが私が書いたコードです:

stmt.executeUpdate("INSERT INTO sysuser VALUES ('"+string.get(1)+"', '"+ string.get(2) +"','"+ string.get(3) +"','"+string.get(4)+"'");

ここで、stringはArrayList<String>です。

コードが機能しておらず、理由がわかりません。別のクエリで完全に機能します。次のエラーが発生します。

SQL構文にエラーがあります。1行目の''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

準備されたステートメントについて読みましたが、構文がわかりませんでした。データを直接挿入するのは安全ではないことは知っていますが、この特定のクエリでは問題ではありません。

4

2 に答える 2

3

あなたは忘れました)

stmt.executeUpdate("INSERT INTO sysuser " + 
                    "VALUES ('" + string.get(1) + "','"+ 
                                  string.get(2) + "','"+ 
                                  string.get(3) + "','"+
                                  string.get(4) + "')");
                                                    ^------------here

また、テーブルのすべての列を埋めていない場合は、このように挿入する列のリストを提供する必要があります

INSERT INTO sysuser (col_name_1, col_name2, col_name5, col_name7)
VALUES (1, 2, 3, 4)
于 2013-01-12T18:54:17.270 に答える
0

このステートメントが生成するSQLを最初に出力してみてください。

String sql = "INSERT INTO sysuser VALUES ('"+string.get(1)+"', '"+ string.get(2) +"','"+ string.get(3) +"','"+string.get(4)+"'";
System.out.println(sql);
stmt.executeUpdate(sql);

次に、お気に入りのSQLツールで実行し、どのようなエラーが発生するかを確認します。そして、両方の結果をここに投稿してください。:)

後でこのリンクを確認してください:Preventing_SQL_Injection_in_Java

于 2013-01-12T18:59:12.187 に答える