我是JDBC的新手,我正在尝试更新数据库中的2个表,因此我想在1个事务中进行操作,因此,如果一个查询失败,另一个查询也会失败。我想提供这样的行为,或者如果其中一个失败,则有机会进行回滚。
这是我的两个查询:
int i = stmt.executeUpdate("INSERT INTO product (title, price, `status`) " +
"VALUES ( \"" + product.getTitle() + "\", " + product.getPrice() + ", " + product.getStatus().ordinal() + ");");
int j = stmt.executeUpdate("INSERT INTO product_categories (product_id, category_id) " +
"VALUES (last_insert_id(), " + categoryId + ");");
如果要自动执行多个语句,则需要使用一个事务。JDBC连接默认为“自动提交”模式,这意味着每个语句都在其自己的事务中执行。因此,您首先需要使用禁用自动提交模式Connection.setAutoCommit(false)
。
在禁用自动提交模式的情况下,已执行的语句将在当前事务中执行,如果没有当前事务,则将启动一个语句。然后,可以使用进行提交Connection.commit()
或使用进行回滚Connection.rollback()
。
您将需要执行以下操作:
try (Connection connection = DriverManager.getConnection(...)) {
connection.setAutoCommit(false);
try (Statement stmt = connection.createStatement()) {
stmt.executeUpdate(<your first update>);
stmt.executeUpdate(<your second update>);
connection.commit();
} catch (SQLException e) {
connection.rollback();
throw e;
}
}
有关更多详细信息,请参见JDBC教程章节“
使用事务”。
并且请了解准备好的语句。将值连接到查询字符串中是不好的,因为如果您忘记对值进行转义,则可能导致SQL注入或奇怪的错误。另请参见JDBC教程章节“
使用准备好的语句”。
我在一个项目中工作,我想插入到两个不同的表中,所以我写了这两个查询(query1,query2),当我只使用一个查询运行程序时,我没有得到任何异常,但当一起执行时,我有一堆异常,我使用了preparedStatement execute(),但没有工作注意:我不是很有经验,请简单解释
问题内容: 我正在一个Java应用程序中工作,我需要同时执行这两个查询(如Java中的Strings),并在出现错误的地方回滚事务。 更新 我创建了一个字符串,其中两个查询用注释建议分隔开 更新 我已经尝试了JDBC原子事务作为Java中的代码。我强迫第二个sql失败,但是即使我指定.setAutoCommit(false); dblink通过第一个查询影响了另一个数据库。我在没有dblink事务
问题内容: 我在这里找到了一些可以更新一个字段的东西:http : //www.karlrixon.co.uk/articles/sql/update-multiple-rows-with-different- values-and-a-single-sql- query/ 我的问题是如何更新多个字段?如: 这当然是行不通的。尝试了其他几种组合并失败了。任何的想法?谢谢! 问题答案:
问题内容: 使用上面的代码,数据库kuis中表Writers的第三行值将使用new_value更新,并且输出将为 Number od rows更新:1 我应该如何同时更新多行? 问题答案: 可能您正在寻找cursor.executemany。
问题内容: 我想在hibernateHql的同一查询中执行多个更新语句。如下所示: 在同一调用中,我想更新表1中的记录并从表2中删除记录。 那可能吗? 问题答案: 简而言之,您所看到的就像是JDBC中的批处理。Hichnate没有为批量更新查询提供Thich,并且我怀疑是否会为Hibernate考虑它。 根据我过去的经验,HQL的批处理功能在现实生活中很少有用。在SQL + JDBC中有用但在HQ
本文向大家介绍Spring如何在一个事务中开启另一个事务,包括了Spring如何在一个事务中开启另一个事务的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring如何在一个事务中开启另一个事务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 spring使用@Transactional开启事务,而且该注解使用propagation属