当前位置: 首页 > 面试题库 >

SQLException:executeQuery方法不能用于更新

严阳秋
2023-03-14
问题内容

我试图使用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对象。

int executeUpdate()

在此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


 类似资料:
  • 问题内容: 在我的程序中,我试图在另一个类中调用该方法。 当我编译它时,会弹出一个错误,提示无法应用。它说它需要一个int,没有参数。但是我在方法中调用了一个int ,所以我不知道这是怎么回事。 问题答案: 此代码有两件事: 它调用时不带(您已将其定义为,因此必须给它一个) 每个循环调用两次 您可以这样解决:

  • 问题内容: 我正在创建一个程序,该程序生成0到9之间的100个随机整数,并显示每个数字的计数。我使用的是十个整数数组 counts 来存储0、1,…,9s的数量。) 编译程序时出现错误: RandomNumbers.java:9:错误:类RandomNumbers中的方法generateNumbers无法应用于给定类型; generateNumbers(); 必需:int [] found:gen

  • 我正在创建一个程序,该程序生成 0 到 9 之间的 100 个随机整数,并显示每个数字的计数。我使用一个由十个整数,计数组成的数组来存储0,1,...,9s的数量。 当我编译程序时,我得到错误: RandomNumbers.java:9:错误:类RandomNumbers中的方法generateNumbers不能应用于给定的类型;< br > generate numbers(); 必需:int[

  • 您好,我正在尝试使用PostConstruct方法初始化字段,但在测试中,此方法不会填充bidiMap字段。 有没有办法模拟字段,它是的字段? 测试: 正在测试的类:

  • 起初,我在使用< code>writeAndFlush(...)直到我偶然发现了这个修复。现在,我已经可以使用< code>writeAndFlush(...)每个字符串都带有后缀/r/n。当我尝试发送< code>ByteBuf对象时,问题仍然存在。显然,我不能只在消息末尾添加/r/n。对此有什么解决办法吗? 如果有帮助,我将使用

  • 我提供了一个第三方sdk。dll和tlb。它可以与WPF一起工作,但当我将其添加到UWP项目时,一旦我到达使用它抛出的sdk的屏幕 使用CoCreateInstanceFromApp的具有CLSID{DBA84AA0-3342-4AF0-96ED-3D8D08D544F3}的COM组件实例由于以下错误而失败:80040154类未注册(HRESULT的例外:0x80040154(REGDB_E_CL