0

Java と JDBC は初めてです。現在、Java コースの学校プロジェクトに取り組んでいます。JDBC を使用していくつかの Java 変数を挿入 SQL クエリに渡そうとしていますが、次の例外が発生します。

SQLException: ORA-00917: missing comma

これは命令です:

stmt.executeUpdate("INSERT INTO question (idnum, question, option1, option2, option3, option4, answer) VALUES("+4+", "+question+", "+option1+", "+option2+", "+option3+", "+option4+", "+answer+")");

クエリを修正する方法はありますか?

4

4 に答える 4

3

まず、エラーが発生する理由は、SQL に構文エラーがあるためです。作成しているものを印刷するだけStringで、問題が表示されます。

つまり、準備済みステートメントを使用する必要があります。SQL を手動で作成する理由はまったくありません。発生している問題を回避するだけでなく、コードが SQL インジェクションの影響を受ける可能性を排除します。

String query = "INSERT INTO question (idnum, question, option1, option2, option3, option4, answer) VALUES (?,?,?,?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setInt(1,4);
pstmt.setString(2,question);
// ... set all your params
pstmt.execute();
于 2013-07-07T22:36:17.887 に答える
2

これを試して

String sql = 
   "INSERT INTO question (idnum, question, option1, option2, option3, option4, answer)       VALUES(?, ?, ?, ?, ?, ?, ?)";
PreparedStatement preparedStatement = connection.prepareStatement(sql);

preparedStatement.setInt(1, 4);
preparedStatement.setString(2, question);
preparedStatement.setString(3, option1);
preparedStatement.setString(4, option2);
preparedStatement.setString(5, option3);
preparedStatement.setString(6, option4);
preparedStatement.setString(7, answer);

int rowsAffected = preparedStatement.executeUpdate();
于 2013-07-07T22:32:11.817 に答える
1

このように二重引用符" を一重引用符に変更します'

String query = "INSERT INTO question (idnum,question) values 
 (4 , "'"+question+"'")";

文字列のみが必要であることに注意してください。 を使用'せずに整数を直接渡すことができます。'PreparedStatement

    PreparedStatement pr = conection.prepareStatement("insert into question(...) values(?,?,?,?...)");
    pr.setInt(1,4);
    pr.setString(2,"Some string");
//.....
 pr.executeUpdate();
于 2013-07-07T22:23:01.037 に答える
0

これを試して:

 stmt.executeUpdate("INSERT INTO question (idnum, question, option1, option2, option3, option4, answer) VALUES("+4+", '"+question+"', '"+option1+"', '"+option2+"', '"+option3+"', '"+option4+"', '"+answer+"')"
于 2013-07-07T22:31:51.447 に答える