Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接关闭时是否可能丢失数据_Java_Postgresql_Jdbc_Database Connection - Fatal编程技术网

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

Java 连接关闭时是否可能丢失数据,java,postgresql,jdbc,database-connection,Java,Postgresql,Jdbc,Database Connection,我有大量的列表结构数据,这些数据流式传输到处理程序。Handler是一个类,它构建INSERT或UPDATE准备好的语句并执行它。目前,所有准备好的语句都在一个连接和事务中执行。所以,想象一下这样的情况:数据库服务器的连接将意外关闭,这显然会导致应用程序崩溃。如何在不丢失数据的情况下重新连接到数据库?如果我只调用DriverManager.getConnection,我会丢失以前连接中的所有数据,对吗 数据是一个大的(1-2GB)XML,包含无序条目列表,应该只使用一个事务上传到数据库,而不使用

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

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

我使用postgres数据库和jdk7

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

是的

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

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

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

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

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

那你最好不要撞车。真的,我觉得就这么简单。您可以通过其他方式代理连接,让您在应用程序崩溃并重新启动后恢复连接,但它无法确切知道它已将多少文件发送到服务器。所以它无法安全地继续下去


实际上,您需要能够在较小的块中完成此操作,或者接受这样的事实:如果崩溃,您必须从头开始。

这里听起来像是数据库代码优化:2个建议:1)使用池
数据源来获得JDBC连接,2)批量插入/更新语句,而不是逐个执行。@BuhakeSindi“批量插入/更新语句”我想这会极大地增加内存使用量,因为你在内存中保留了数百万个
String
对象。你肯定会将其分解成块,并批量插入/更新这些块。我想这对任何人来说都是清楚的。@BuhakeSindi我不知道在关闭连接的情况下如何保存丢失的数据。非常感谢。我会考虑另一种上传数据的方式。