Arj*_*rma -2 java mysql sql jdbc
String sql = "UPDATE `test`.`books` SET ? = ? WHERE `isbn` = ?;";
PreparedStatement ps = null;
ps = conn.prepareStatement(sql);
ps.setString(1,whatToUp);
ps.setString(2, data);
ps.setString(3, isbn);
ps.executeUpdate(sql);
System.out.println("Statement executed");
conn.close();
Run Code Online (Sandbox Code Playgroud)
错误说查询有问题.我使用MySQL 5.6.我从工作台6.0复制了该语句,并将其放置?在我需要的任何地方.
即便如此,也会出错:
String sql = "UPDATE `test`.`books` SET `title` = ? WHERE `isbn` = ?;";
PreparedStatement ps = null;
ps = conn.prepareStatement(sql);
ps.setString(1, data);
ps.setString(2, isbn);
ps.executeUpdate(sql);
System.out.println("Statement executed");
conn.close();
Run Code Online (Sandbox Code Playgroud)
您可以动态构建查询
String sql = "UPDATE `test`.`books` SET " + whatToUp + " = ? WHERE `isbn` = ?;";
PreparedStatement ps = null;
ps = conn.prepareStatement(sql);
ps.setString(1, data);
ps.setString(2, isbn);
ps.executeUpdate(); // you need to use the overloaded method without an argument
Run Code Online (Sandbox Code Playgroud)
请注意,您很容易受到SQL注入攻击.
如果由于某种原因出错,请删除所有引号.
String sql = "UPDATE test.books SET " + whatToUp + " = ? WHERE isbn = ?;";
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,那么您的架构不匹配.随你(由你决定.
在我急于回答的时候,我没有看到你在使用
ps.executeUpdate(sql);
Run Code Online (Sandbox Code Playgroud)
这个方法的javadoc说
注意:无法在PreparedStatement或CallableStatement上调用此方法.
你必须使用
ps.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
因为你已经为方法提供了sql语句.
如果您刚刚提供了异常堆栈跟踪,所有这些都将非常快速地解决.考虑下次你问一个问题