我想使用Java一次将多行插入MySQL表中。行数是动态的。过去我在做…
for (String element : array) {
myStatement.setString(1, element[0]);
myStatement.setString(2, element[1]);
myStatement.executeUpdate();
}
我想对此进行优化,以使用MySQL支持的语法:
INSERT INTO table (col1, col2) VALUES (‘val1’, ‘val2’), (‘val1’, ‘val2’)[, …]
但由于PreparedStatement我不知道有什么方法可以这样做,因为我事先不知道array将包含多少个元素。如果无法使用PreparedStatement,我还可以怎么做(仍然对数组中的值进行转义)?
你可以通过创建批处理PreparedStatement#addBatch()
并通过执行PreparedStatement#executeBatch()
。
这是一个启动示例:
public void save(List<Entity> entities) throws SQLException {
try (
Connection connection = database.getConnection();
PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
) {
int i = 0;
for (Entity entity : entities) {
statement.setString(1, entity.getSomeProperty());
// ...
statement.addBatch();
i++;
if (i % 1000 == 0 || i == entities.size()) {
statement.executeBatch(); // Execute every 1000 items.
}
}
}
}
因为某些JDBC驱动程序和/或DB可能对批处理长度有限制,所以它每1000个项目执行一次。
问题内容: 我想使用PreparedStatement将行插入表中。该表有3列(int,String,String)。关键是int列是AUTO_INCREMENT,所以我想将该变量保留为空,然后让数据库完成该工作(这是一个id)。还没有找到如何做! 这是一个MySQL数据库。 问题答案: 这是相对简单的,只需从列列表中删除自动增量列即可: 准备该语句,设置两个参数,然后在非查询模式下执行。
我正在努力将JSON对象插入我的postgres v9.4 DB。我已经将名为“evtjson”的列定义为类型json(而不是jsonb)。 我试图在Java(jdk1.8)中使用准备好的语句将Json对象(使用JEEjavax.json库构建)插入到列中,但我一直遇到SQLException错误。 我使用以下方法创建JSON对象: 然后,我将这个对象作为参数传递给另一个方法,以使用准备好的语句将
问题内容: 有人可以告诉我,以下JDBC代码中的第一个条件是否是针对两个不同的表执行两个不同的SQL查询? 问题答案: 在我的书中,我总是建议关闭已经打开的资源,以避免可能的泄漏。 一种更现代的方法是使用try-with- resources :
问题内容: 这似乎是一个非常简单的问题,但是我无法弄清楚我的问题是什么。我有一个方法addTask,它将一些信息添加到我们的数据库中,如以下代码所示: 我的问题是prepareStatement.execute()始终返回false,表示该信息尚未添加到数据库中。我可以运行psql,这确认没有任何内容写入数据库。该连接肯定会连接到正确的数据库(我将其放置在其他一些printlns中进行检查)。我正
我正试图使用Java中的一条准备好的语句在数据库中插入信息。我使用了占位符和设置字符串来避免SQL注入,但我一直有相同的错误:靠近“?”的Sytax不正确有人知道我做错了什么吗?这是我的代码: 我做了很多尝试,但都没有成功,连接到数据库的用户也有读写权限。 非常感谢你的回答!
问题内容: 如何使用php将多个数据插入mysql数据库。我尝试使用for循环,但没有运气。 问题答案: 只需在循环中构建查询,然后在循环竞争时执行查询即可 您还会注意到,我将您对数据库连接的包含移到了循环之外。无需重复拨打该电话。 另外,请确保您逃脱了要插入的那些值,或者使用参数化查询来进行插入,以防止SQL注入。