Java 连接关闭时是否可能丢失数据
我有大量的列表结构数据,这些数据流式传输到处理程序。Handler是一个类,它构建Java 连接关闭时是否可能丢失数据,java,postgresql,jdbc,database-connection,Java,Postgresql,Jdbc,Database Connection,我有大量的列表结构数据,这些数据流式传输到处理程序。Handler是一个类,它构建INSERT或UPDATE准备好的语句并执行它。目前,所有准备好的语句都在一个连接和事务中执行。所以,想象一下这样的情况:数据库服务器的连接将意外关闭,这显然会导致应用程序崩溃。如何在不丢失数据的情况下重新连接到数据库?如果我只调用DriverManager.getConnection,我会丢失以前连接中的所有数据,对吗 数据是一个大的(1-2GB)XML,包含无序条目列表,应该只使用一个事务上传到数据库,而不使用
INSERT
或UPDATE
准备好的语句并执行它。目前,所有准备好的语句都在一个连接和事务中执行。所以,想象一下这样的情况:数据库服务器的连接将意外关闭,这显然会导致应用程序崩溃。如何在不丢失数据的情况下重新连接到数据库?如果我只调用DriverManager.getConnection
,我会丢失以前连接中的所有数据,对吗
数据是一个大的(1-2GB)XML,包含无序条目列表,应该只使用一个事务上传到数据库,而不使用中间事务
我使用postgres数据库和jdk7
所以,想象一下这样的情况:数据库服务器的连接将意外关闭,这显然会导致应用程序崩溃
是的
如何在不丢失数据的情况下重新连接到数据库
在数据库确认提交数据之前,不要在应用程序端丢弃数据。这可能需要确保客户机可以被要求再次发送数据,让客户机依次等待您确认成功、写入临时文件或其他
如果我只调用DriverManager.getConnection,我会丢失以前连接中的所有数据,这对吗
对。当连接关闭时,事务将回滚
数据是一个大的(1-2GB)XML,包含无序条目列表,应该只使用一个事务上传到数据库,而不使用中间事务
那你最好不要撞车。真的,我觉得就这么简单。您可以通过其他方式代理连接,让您在应用程序崩溃并重新启动后恢复连接,但它无法确切知道它已将多少文件发送到服务器。所以它无法安全地继续下去
实际上,您需要能够在较小的块中完成此操作,或者接受这样的事实:如果崩溃,您必须从头开始。这里听起来像是数据库代码优化:2个建议:1)使用池
数据源来获得JDBC连接,2)批量插入/更新语句,而不是逐个执行。@BuhakeSindi“批量插入/更新语句”我想这会极大地增加内存使用量,因为你在内存中保留了数百万个String
对象。你肯定会将其分解成块,并批量插入/更新这些块。我想这对任何人来说都是清楚的。@BuhakeSindi我不知道在关闭连接的情况下如何保存丢失的数据。非常感谢。我会考虑另一种上传数据的方式。