忘记commit的一次教训

   由于业务需求,已经上线的系统新增加了一些需求,其中一个需求是,从一个SQLSERVER数据库导入数据到生产的ORCLE数据库,

由于我的失误导致系统上线后 生产的Oracle数据没有导入成功,但是在本地测试的时候是正常的,其中有一点要说明就是系统采用的是

jdbc方式操作数据库,数据库连接使用的是连接池的方式。我懒省事,本地就没有配置连接池,直接用jdbc进行的连接,因为要导入数

据的oracle中,操作的时候就要采用分批提交的方式,所以要将事务设置成手动提交,conn.setAutoCommit(false);这就给我的失误埋下了炸弹。

  下面就记录下处理这个失误的整个过程:

   系统再次上线后,客户反映说数据没有导入,于是我就远程上他们的数据库,结果发现新添加的几个表的确没有数据,这时十分惊讶,

感觉不太可能,于是又给客户他们要了上线后的日志,看后日志发现没有报任何错误,而且导入的步骤日志显示导入也都顺利执行了,

这时我就更加奇怪了,但是既然出现问题了,作为苦逼的程序员就要解决问题啊。于是又重新check了一下代码,当我看到

conn.setAutoCommit(false);的时候眼睛亮了,于是继续往下走,发现自己忘记了commit,心里大大松了一口气,但是另一个问题又出来了,

为什么我本地采用jdbc直接连接的时候数据可以插入进去,加不加commit没有影响呢?难道错误不在这里?为了和生产上环境一致,

我决定采用数据库连接池的方式重新测试一下,由于服务器采用的是jboss4.0,以前没有配置过,所以又搜索了一下配置方法,下面也记录一下吧

 1.Copy数据库的JDBC驱动至部署文件夹中的lib目录下

 2. 建立数据库配置文件,配置数据库参数,文件以-ds.xml为结尾,如oracle-ds.xml。配置文件具体方法参照docs/example/jca下,有各种数据库的例程。

  你可以针对自己的来写,如下:

<datasources>
    <local-tx-datasource>
        <jndi-name>jdbc/ews</jndi-name>
        <connection-url>jdbc:oracle:thin:@192.168.4.222:1521:orcl</connection-url>
        <driver-class>oracle.jdbc.OracleDriver</driver-class>
        <user-name>ewsvii</user-name>
        <password>ewsvii</password>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>50</max-pool-size>
        <blocking-timeout-millis>60000</blocking-timeout-millis>  
        <idle-timeout-minutes>2</idle-timeout-minutes>
        <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
    </local-tx-datasource>
</datasources>

 web应用为default,则放在$JBOSS4_HOME\server\default\deploy下。

 

配置完数据库连接池后,然后分别在使用commit和不使用commit的时候进行测试,结果发现这时候如果不使用commit数据就无法插入成功。

这样也就找到了问题的所在,修改了代码之后重新上线,oracle数据就可以正常导入了。

但是为什么采用jdbc直接连接数据库的时候,不使用commit的话数据可以正常插入呢?这个问题还是没有解决。

转载于:https://www.cnblogs.com/heshan664754022/p/3184183.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值