首先是我所作的B/S软件需要多种数据库的支持,其中就包括Access数据库。而为了达到快的速度,必须把access的连接放入数据库连接池,所以我专门给access做了个数据库连接池。

问题出现了:“就是用access连接池的时候,有的时候会出现修改过的数据不能及时的反应到界面上来。”

刚开始我以为是我的access连接池写的有问题,于是是大找特找就是找不到原因,后来我干脆不用池,直接自己new一个全局连接放在静态变量里看一下会不会有问题,结果显示完全没有问题。

接着我又new 了两个连接放在静态变量里  conn1 和  conn2   ,  然后让conn1做了一个update数据操作,conn2又立马获取update的值,结果显示 获取的数据还是update前的数据,  然后过3到5秒 再让conn2去获取update的值 才能看到已经修改了。

于是我得出这样的结论,access数据库的多个连接情况下,其中某一个连接进行了修改操作需要过3到4秒才能反映到其他连接里来

如果这个结论被确定那就是说 access无法实现 传统上的 数据库连接池。

于是我想会不会是我的数据库操作代码有问题,于是我干脆用两台电脑做测试,分别在两台电脑上用office打开同一个access数据库,然后在其中一台上修改了某个数据,另外一台上立马打开改数据,结果显示 数据还是没有更新。  靠。从目前来看我上面的结论是符合实际的。

如果真的这个结论被坐实的话,就像我上面说的,“access无法实现 传统上的 数据库连接池”。那麻烦就大了,因为其他数据库连接池,如:sqlserver,是可以用的,而access不能用,那么可能需要更多的代码区分开来编写。

于是我又想,会不会是使用access连接的时候有没有什么特殊的属性(或者说方式),才能保证多个access连接能及时的反应信息。

这里付上操作数据库的代码:
说明:test.mdb中一个表,test 表,中间有两个自段id  和 num  都是数字。记录就一条 id=1  num=1
protected void LinkButton11_Click(object sender, EventArgs e)
    {
        String connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("/test.mdb") + ";Persist Security Info=True;";
        String selectSql = "select [num] from  [test] where [id]=1";
        String updateSql = "Update [test] set [num]=[num]+1 where [id]=1";

OleDbConnection connForUpdate = new OleDbConnection(connStr);
        OleDbConnection connForSelect = new OleDbConnection(connStr);
       
        OleDbCommand cmd;
        Object resultValue;

try
        {
            connForUpdate.Open();
            connForSelect.Open();

//修改前提取
            cmd = new OleDbCommand(selectSql, connForSelect);
            resultValue = cmd.ExecuteScalar();
            Response.Write("修改前:" + resultValue);
            Response.Write("<br/>");

resultValue = null;

//执行修改
            cmd = new OleDbCommand(updateSql, connForUpdate);
            cmd.ExecuteNonQuery();

//修改后提取
            cmd = new OleDbCommand(selectSql, connForSelect);
            resultValue = cmd.ExecuteScalar();
            Response.Write("修改后:" + resultValue);

}
        finally
        {
            connForSelect.Close();
            connForUpdate.Close();
        }
    }

此代码的结果是:
修改前:6
修改后:6

最终结论是,Access确实不能很好的实现连接池。 没法子,只能是变相的解决问题了。
我这里给出Access操作的几个可以提高速度方法:
1.让某些只是提取操作的单步业务使用同一个链接, 该连接因为都是单步提取数据,所以“不是即时性”的数据问题不大,如:获取点击数、查询等等都使用同一个连接,此conn保持状态不要关闭。
2.如果是非单步的业务就要使用完了连接及时关闭,不然会出现看不到刚刚更新过的数据,如:新增一条记录,新增完后要显示此记录的结果,由于是两张页面所以保证第一张页面的conn关闭了,第二张页面new出来,就没有问题。
3.这里可以思考这样的连接池,在conn返回到连接池的时候会把conn和session绑定起来,在需要获取一个连接的时候,先要判断所有和session绑定的conn,绑定时间在5秒前的就取消绑定,并把连接放回到freelist列表里,然后是根据传进来sessionID,如果在和session绑定的conn集合中能够找到相同的id那么就再次使用这个conn。如此这般便也可以算是一个连接池。

数据库连接池问题[转]相关推荐

  1. c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记

    现在 主流的数据库连接池有:Proxool.C3P0.DBCP.tomcat-jdbc.Druid.其中tomcat-jdbc是tomcat服务器比较可靠的 数据库连接池. Tomcat 在 7.0 ...

  2. Druid数据库连接池超时问题com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10

    问题描述: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10at com.alibab ...

  3. Druid数据库连接池使用参考

    一:添加相应依赖 druid-1.0.9.jar: mysql-connector-java-5.1.48-bin.jar 二:编写properties文件 放置位置在src中: driverClas ...

  4. mysql连接池为何不用nio_为什么要用数据库连接池?

    1.为什么要用数据库连接池? 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库 都有一定的资源负荷,尤其应用压力较大时资源占用比 ...

  5. net core mysql 连接池_EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽

    EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽 发布时间:2019-02-18 22:05, 浏览次数:1152 , 标签: EF Core DbContextPool ...

  6. 数据库连接池,实现及分析

    在我们日常对数据库操作时存在一个问题,要为每次数据操作请求建立一个数据库连接.而每次建立连接都需要花费很多开销,如加载驱动类.注册驱动.获取连接,这样如果在短时间内连接多次,就 会耗费多余的时间(加载 ...

  7. swoole实现数据库连接池

    2019独角兽企业重金招聘Python工程师标准>>> 原生 PHP CURD 让我们来回顾一下PHP中数据库的使用 <?php # curd.php$id = 1;$dbh ...

  8. 聊一个不常见的面试题:为什么数据库连接池不采用 IO 多路复用?

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天我们聊一个不常见的 Java 面试题:为什么数据库连接池不采用 IO 多路复用? 这是一个非常好的问题.IO多路复用被视为是非常 ...

  9. 为什么数据库连接池不采用 IO 多路复用?

    欢迎关注方志朋的博客,回复"666"获面试宝典 接着,今天我们聊一个不常见的 Java 面试题:为什么数据库连接池不采用 IO 多路复用? 这是一个非常好的问题.IO多路复用被视为 ...

  10. 数据库连接池为什么要用threadlocal呢?不用会怎样?

    点击关注公众号,Java干货及时送达 来源:blog.csdn.net/qq_42405666/article/details/108258820 这个问题我疑问了很久很久,主要如下截图. 个连接对应 ...

最新文章

  1. 走近NAP功能 全面了解Vista系统安全机制
  2. npm script 的实践
  3. [one day one question] safari缓存太厉害
  4. [转]将微信和支付宝支付的个二维码合二为一
  5. 基于 SSH 的远程操作以及安全,快捷的数据传输转
  6. 自己写cache server之网络框架处理——Oracle、Mysql都不靠谱儿(中)
  7. 悟透delphi 第十一章 面向对象数据库基础
  8. 面试题 05.08. 绘制直线【位运算】
  9. 2016noip蚯蚓《单调队列》
  10. jq 实现头像(气泡式浮动)
  11. C# object 转 Intptr, Intptr 转 object
  12. 【工具】(九):Mac工具整理
  13. 物联网行业应用前景分析
  14. Python爬虫基础:验证码概述及打码平台
  15. 最高限价!单晶组件或无缘国网分布式光伏系统招标
  16. 51单片机 独立按键k1控制数码管移位 k2控制数值加
  17. Xbrowser无法连接到Linux的解决办法
  18. 软考中级 真题 2018年下半年 系统集成项目管理工程师 基础知识 上午试卷
  19. 开发工程师必备的一直网站
  20. 高性能RTMP推流服务器软件EasyDSS如何支持推流摄像机推流直播进行云端录像存储及计划保存

热门文章

  1. 信息学奥赛一本通(1150:求正整数2和n之间的完全数)
  2. 信息学奥赛一本通(1054:三角形判断)
  3. 信息学奥数一本通(1004:字符三角形)
  4. 线性代数 —— 矩阵快速幂
  5. 统计难题(HDU-1251)
  6. 训练日志 2019.2.14
  7. 9 WM配置-主数据-定义物料分阶段的范围(Staging Area)
  8. java cookie secure_Cookie的Secure属性
  9. Numpy Math functions
  10. 01_Influxdb1.7.7的安装配置启动