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

Is data loss possible when connection is closed

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

数据很大 (1-2 GB) XML 包含无序条目列表,应该仅通过一次事务上传到数据库,没有中间事务。

我用的是postgres数据库和jdk7。

So, imagine the situation that connection will be unexpectedly closed from database server, which will obviously lead application to crash.

是的。

How can i reconnect to database without data loss?

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

Am i right that if i just call DriverManager.getConnection, i'll lose all data from previous connection?

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

Data is a large (1-2 GB) XML containing list of unordered entries and should be uploaded to database with one transaction only, no intermediate transactions.

那你最好不要崩溃。真的,我想就这么简单。您可以通过其他方式代理连接,让您在应用程序崩溃并重新启动后恢复连接,但那样它就不知道它已经向服务器发送了多少文件。这样就无法安全继续了。

真的,您需要能够以较小的块来执行此操作,或者只是接受如果您崩溃了就必须从头开始的事实。