我在使用 Java PreparedStatements 时遇到一些 SQL 语法错误问题。
我正在尝试准备的三个声明如下:
insertBook = con.prepareStatement("INSERT INTO Books ? VALUES ?");
selectBooks = con.prepareStatement("SELECT * FROM Books?");
deleteBooks = con.prepareStatement("DELETE FROM Books?");
在第一个语句中,我想传递两个字符串,一个包含要插入的列列表,另一个包含要插入的所有值。在另外两个语句中,我想在末尾插入一个(可选)WHERE 子句。
我已经看过this问题似乎涉及类似的问题,但在他的例子中,他似乎试图在没有意义的地方使用 ? ;除非我在 SQL 方面失败了,否则我看不出有什么理由不能在此处插入字符串。我已经搜索了 Javadocs,但似乎也无法给出解释。
非常感谢!
最佳答案
它就是这样设计的。 ?-s 仅保留参数,请考虑使用 StringBuilder
连接“WHERE”子句。
这只是一个简单的例子,你可能不会在这里使用StringBuilder
,它对于构建复杂的查询很有效
这是您的示例
String whereClause = " WHERE Id = ?";
String insert = "INSERT INTO [Table](C1, C2) VALUES(?, ?)";
String select = "SELECT * FROM [Table] ";
String update = "UPDATE [Table] SET C1 = ? ";
String delete = "DELETE FROM [Table] ";
PreparedStatement insertSt = con.prepareStatement(insert);
PreparedStatement selectSt = con.prepareStatement(select + whereClause);
PreparedStatement deleteSt = con.prepareStatement(update + whereClause);
PreparedStatement updateSt = con.prepareStatement(delete + whereClause);
关于JavaPreparedStatement语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15209061/