【问题标题】:PostgreSQL: TransactionsPostgreSQL:事务
【发布时间】:2014-05-27 19:01:51
【问题描述】:

我正在使用 JDBC 在 JAVA 中编写客户端。我想执行这样的语句

resultSet = statement.executeQuery("BEGIN; Delete from Table id=1 Delete from table2 id=1 COMMIT;");

显然上述语句不起作用。那么我可以按照以下方式进行吗?相反,我在这个例子中使用了 Insert。

con.setAutoComitt(false); 

String qry1 = "..." 
pst1 = con.prepareStatement(qry1) 
//Insert code here to add values to prepared statement pst1 
pst1.executequery(); 

String qry2 = "..." 
pst2 = con.prepareStatement(qry2) 
//Insert code here to add values to prepared statement pst2 
pst2.executequery(); 

con.comitt(); 

这是正确的吗?任何帮助或文档都会很棒。我什么也找不到。

【问题讨论】:

  • 是的,你就是这么干的。 docs.oracle.com/javase/tutorial/jdbc/basics/transactions.html 之后重新打开自动提交可能是个好主意,这样您以后就不会破坏某些东西。
  • 所以一旦我提交了查询语句就会被执行?
  • 好的,我明白了,谢谢你的链接,这很棒。
  • 不。查询被执行,然后当您提交时,它们被提交。您可能想在数据库文档中查找事务是如何工作的。
  • 如果你想执行单个语句然后提交,那么你可以只启用自动提交:在语句结束后自动完成提交(例如DELETE立即,SELECT之后读取结果集)。只有当您需要在多个语句上进行事务时(或者如果您想从单个连接同时使用多个语句),您才需要禁用自动提交。

标签: java postgresql jdbc transactions


【解决方案1】:

当我想与我的 postgreSQL 数据库通信时,我通常会这样做

stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("select osm_id from vertices;");

您必须在不同的“语句”中执行每个命令,因为每个语句仅在语句包含多个命令时才会返回一个查询的结果,它将引发异常

【讨论】:

  • @EliMiller 否:JDBC 标准不允许这样做。一个 java.sql.Statement 执行应该是一个 SQL 语句(尽管一些驱动程序可以选择启用允许多个语句的更宽松的模式)。
猜你喜欢
  • 2012-02-15
  • 2016-03-29
  • 2019-06-07
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多