我试图使用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();
问题内容: 在我的程序中,我试图在另一个类中调用该方法。 当我编译它时,会弹出一个错误,提示无法应用。它说它需要一个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