• 原:对DBF的文件和Oracle数据库在事务上进行对比


    还有些许遗漏,实验理论上并不十分严密!

    1、  事务隔离级别设置

    Oracle有两种事务隔离级别,分别是Connection.TRANSACTION_READ_COMMITTED(读已提交)和Connection.TRANSACTION_SERIALIZABLE(串行读)。如果设置隔离级别出错,会抛异常如下java.sql.SQLException: 仅 READ_COMMITTED 和 SERIALIZABLE 是有效的事务处理级。

    DBF仅仅支持Connection.TRANSACTION_READ_COMMITTED(读已提交),其它类型的数据库事务隔离级别,当前使用的驱动不支持,会抛异常。

    2、  在开启事务情况下的对比:

    实验一:程序中开两个线程,一个批量提交(每次插入100条数据),一个去读数据库。原始表中数据为空。

    Oracle在事务开启时,如果没有做commit操作,其它线程是不会读到未提交的数据的。在这种情况下,读数据的线程每次读出的数据数目都是100的整数。另外加上删除线程以后也是一样的。

    第:1次查询

    查询影响数据数目:0

    第:2次查询

    查询影响数据数目:0

    第:3次查询

    查询影响数据数目:0

    第:4次查询

    查询影响数据数目:100

    第:1次插入

    第:5次查询

    查询影响数据数目:100

    第:2次插入

    第:6次查询

    查询影响数据数目:200

    第:7次查询

    查询影响数据数目:300

    第:8次查询

    查询影响数据数目:300

    第:9次查询

    查询影响数据数目:300

    第:10次查询

    查询影响数据数目:300

    第:11次查询

    查询影响数据数目:300

    而对于DBF数据库来说,虽然事务开启了,但是其它线程可以读到当前线程未提交的数据。理论上来说,读取数据的线程每次读出的数据个数应该是100的倍数,但是实际情况不是这样的。运行结果如下:

    查询影响数据数:0

    查询影响数据数:0

    查询影响数据数:24

    查询影响数据数:43

    查询影响数据数:57

    查询影响数据数:75

    查询影响数据数:93

    插入影响数据数:100

    查询影响数据数:100

    查询影响数据数:100

    查询影响数据数:120

    查询影响数据数:138

    查询影响数据数:155

    查询影响数据数:169

    查询影响数据数:187

    插入影响数据数:100

    查询影响数据数:200

    根据测试结果来看,事务设置的隔离级别似乎没有生效,读到了写数据的线程没有提交的数据,没有达到预期的不读中间数据的目的。

    注意:

    dbf一种特殊的文件格式!表示数据库文件,Foxbase,Dbase,VisualFoxPro,等数据库处理系统所产生的数据库文件! 本身并不是数据库。

    如果说需要用到传统的数据库事务,那么可不可以有一个中间过程,程序操作在传统的大型数据库Oracle或者SQL Server上进行,然后最后导出成DBF文件。通过存储过程或者程序。

    相关参考文献如下:

    http://wenku.baidu.com/view/4965352b3169a4517723a33f.html

    http://wen-xudong7.javaeye.com/blog/409181

    http://tech.it168.com/oldarticle/2006-07-18/200607181949046.shtml

  • 相关阅读:
    应用上架前如何知道自己应用的下载地址?
    Multi-line NSAttributedString with truncated text
    Adding AirDrop File Sharing Feature to Your iOS Apps
    Add sharing to your app via UIActivityViewController
    [原]iOS自带社会化分享框架——Social.framework
    xcode 制作静态库.a文件 详解
    Fiddler怎么对IPhone手机的数据进行抓包分析
    Mac上的抓包工具Charles
    30、准确计算CoreText高度的方法
    keil MDK中如何生成*.bin格式的文件
  • 原文地址:https://www.cnblogs.com/phoebus0501/p/1894495.html
Copyright © 2020-2023  润新知