0

我是 Java 和 JDBC 的新手。目前我正在为 Java 课程做一个学校项目。我正在尝试使用 JDBC 将一些 java 变量传递给 Insert 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+"'")";

请注意,只有 string 需要',您可以直接传递整数而不使用',但是,我更喜欢使用PreparedStatement,因为 SQL 注入更容易且非常强大。

    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 回答