JavaPreparedStatement语法问题

标签 java sql derby

我在使用 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/

相关文章:

java - 使用 Apache Derby 的内存嵌入式服务器

java - 我无法连接到数据库 - 程序不知道 JAR 文件在哪里

java - 在Java中存储和比较大量字符串

java - Java 中的多个结果集到 excel 文件

jdbc - 版本 10.15.1.3 的 org.apache.derby.jdbc.ClientDriver 在哪里?

MySQL:用最后一个已知值填补空白

sql - 我需要将专为 MySQL 设计的查询翻译为适用于 SQL Server 2005

java - 使用 selenium webdriver 进行自动化但无法单击元素

java - 提高mysql插入速度

mysql - 如果同一 user_id 存在值,则选择记录