日期:2014-05-20  浏览次数:20693 次

有谁清楚JDBC驱动和数据库之间交互的细节吗
有谁清楚JDBC驱动和数据库之间交互的细节吗

比如:当用只读(CONCUR_READ_ONLY)、快进(TYPE_FORWARD_ONLY   )的方式从数据库读取记录时,为什么对于较大的结果集,性能不佳?为什么用fetch_size可以调节性能?这儿的性能是指:JDBC驱动的内存消耗、还是数据库服务器的内存消耗、还是读取时间、还是对其他的Statement的操作有影响?

也就是,JDBC驱动和数据库之间的后台的数据交互格式、交互过程是怎样的?

------解决方案--------------------
jdbc是一种规范。jdbc应该传输给java虚拟机,通过java虚拟机中的socket来与远程的数据库进行通信。jdbc不应该调用java中的socket,而应该调用虚拟机中的socket与数据库接口通信。
lz同意我这样的看法吗?我现在在研究java同数据库的通信,自己认为是这样。其他朋友还有什么看法呢?
------解决方案--------------------
用链接池试试,能不能改善性能。
我觉得它肯定是有优化算法的,jdbc不会为了一次next进行一次数据获取。
一定是按照一定大小批量获取数据的。当然这个数据实现已经由query语句在server端准备好。
------解决方案--------------------
关注
------解决方案--------------------
底下懂的继续
------解决方案--------------------
ResultSet 是在真正在使用时才真正从数据库里获得数据
------解决方案--------------------
回答一个不知道有没有错误,

对于jdbc来说在和数据库交互的时候就是建立链接和释放链接的过程,在这过程中如果结果集较小或者连接对象较少是没有问题的,但是想像一下这种情况:

你到肯德基去买东西你去要一个服务员给你请求一个,这样不光要给你汉堡还要收钱还要通知师傅给你作汉堡,你走了还要通知师傅他不要再做了.

然后我们用一种方法叫做 "连接池 ",意思就是:
你到肯德基去买东西,她看到你的单,顺手从后面的池子 <去过的应该知道> 里面给你拿一个,她也不管你要多大的,你什么时候来,提前给你在池子里面放了很多的连接等你来拿,是不是速度快了?

------解决方案--------------------
连接池所做的工作就是初始化很多个连接,对这些连接进行管理。
以往的方式是打开连接,执行sql,然后关闭连接。
再次访问数据库的时候需要再次打开连接,执行sql,然后关闭连接。

连接池所打开的连接其实是不关闭的。
当程序调用数据库访问的时候,他会找一个空闲的连接给程序使用。
这样就省去频繁打开连接,关闭链接的操作,这个操作是很费效率和资源的。


对于搂主的问题,我觉得有实际意义吗?要考虑性能的话,也不应该是这种问题。
我很难明白搂主搞懂这个要做什么?
------解决方案--------------------
JDBC与底层数据库的交换格式每个数据库是不同的,与底层数据库是通过TCP/IP协议进行交互的。