SQLException:executeQuery方法不能用于更新

我试图使用Java servlet类将从注册表单中获取的用户信息插入Derby DB。

在用户单击提交了用户信息的“提交”按钮之后,我立即连接到NetBeans上的数据库。然后应运行此方法:

public void insertNewUser(String userName, String passWord, String lastName, String firstName, String age, char sex, String email) {

try {

stmt = conn.createStatement();

String insertNewUserSQL = "INSERT INTO " + studentsTable + " VALUES ('" + userName + "', '" + passWord + "', '" + lastName + "', '" + firstName + "', " + age + ", '" + sex + "', '" + email + "')";

System.out.println(insertNewUserSQL);

stmt.executeQuery(insertNewUserSQL);

stmt.close();

} catch(SQLException sqlExcept) {

sqlExcept.printStackTrace();

}

}

但是我不断收到以下异常:

java.sql.SQLException: executeQuery method can not be used for update.

这到底是什么意思?

SQL命令是正确的,因为我可以在NetBeans SQL命令窗口上手动进行操作。

Servlet是否有限制或我不知道的东西?

提前致谢!

回答:

由于您要插入记录,因此应使用executeUpdate()not executeQuery()

以下是一些通常被滥用的方法:


布尔型execute()

在此PreparedStatement对象中执行SQL语句,该对象可以是任何类型的SQL语句。

ResultSet executeQuery()

在此PreparedStatement对象中执行SQL查询,并返回查询生成的ResultSet对象。

在此PreparedStatement对象中执行SQL语句,该对象必须是SQL

INSERT,UPDATE或DELETE语句;或不返回任何内容的SQL语句,例如DDL语句。


还有一件事,您的查询很脆弱,因为它容易受到的影响SQL Injection。请使用做参数化PreparedStatement

示例代码段:

String insertNewUserSQL = "INSERT INTO " + studentsTable + " VALUES (?, ?, ?, ?, ?, ?, ?)";

PreparedStatement pstmt = con.prepareStatement(insertNewUserSQL);

pstmt.setString(1, userName);

// ... repeat this step until the last parameter ....

pstmt.setString(7, email);

pstmt.executeUpdate();

  • Java PreparedStatement

以上是 SQLException:executeQuery方法不能用于更新 的全部内容, 来源链接: utcz.com/qa/429676.html

回到顶部