连接关闭时是否可能丢失数据

时间:2015-09-25 11:06:10

标签: java postgresql jdbc database-connection

我有大量的列表结构数据正在流式传输到处理程序。 Handler是一个构建INSERTUPDATE预处理语句并执行它的类。所有准备好的语句现在都在一个连接和事务中执行。因此,想象一下连接将从数据库服务器意外关闭的情况,这显然会导致应用程序崩溃。如何在没有数据丢失的情况下重新连接数据库?我是对的,如果我只是打电话给DriverManager.getConnection,我会丢失之前连接的所有数据吗?

数据是一个包含无序条目列表的大型(1-2 GB)XML,应该只使用一个事务上传到数据库,没有中间事务。

我使用postgres数据库和jdk7。

1 个答案:

答案 0 :(得分:0)

  

因此,想象一下连接将从数据库服务器意外关闭的情况,这显然会导致应用程序崩溃。

是的。

  

如何在不丢失数据的情况下重新连接到数据库?

在数据库确认提交之前,您不会丢弃应用程序端的数据。这可能需要确保可以要求客户再次发送数据,在确认成功,编写临时文件或其他任何内容之前让客户端轮流等待。

  

我是对的,如果我只是调用DriverManager.getConnection,我会丢失以前连接中的所有数据吗?

是。当连接关闭时,事务将被回滚。

  

数据是一个包含无序条目列表的大型(1-2 GB)XML,应该只使用一个事务上传到数据库,没有中间事务。

然后你最好不要崩溃。真的,我觉得它就这么简单。您可以通过其他可以在应用程序崩溃并重新启动后恢复连接的其他内容来代理连接,但是它不会确切地知道它已经发送到服务器的文件的确切数量。所以它无法安全继续。

真的,你需要能够以较小的块来做这件事,或者只是接受,如果你崩溃了,你必须从头开始。

相关问题