java程序中绑定oracle变量

java程序中绑定oracle变量

ID:8966572

大小:20.00 KB

页数:2页

时间:2018-04-13

java程序中绑定oracle变量_第1页
java程序中绑定oracle变量_第2页
资源描述:

《java程序中绑定oracle变量》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、JAVA程序中绑定ORACLE变量JAVA程序中的SQL语句编写上,如没有使用ORACLE绑定变量,很大程度降低了数据库的性能。SQl语句的执行过程分几个步骤:语法检查、分析、执行、返回结果。其中分析存在两种可选的解析过程,一种叫做硬解析(HardParse),一种软解析(SoftParse)。一条SQL语句通过语法检查后,Oracle会先去sharedpool中找是否有相同的sql,如果找着了,就叫软分析,然后执行SQL语句。硬分析主要是检查该sql所涉及到的所有对象是否有效以及权限等关系,然后根据RBO或CBO模式生成执行计划,然后才执行SQL语句。SQL语句硬解析

2、太多,严重消耗CPU资源,更重要的是会占据重要的们闩(latch)资源,严重的影响系统规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和CPU的数量来解决。Oracle中,当用户传进sql语句的时候,Oracle就进行一次硬解析,然后将解析之后的sql语句存放到共享池中,共享池中SQL语句数量太多,重用性极低,加速了SQL语句的老化,导致共享池碎片过多。共享池中不同的SQL语句数量巨大,根据LRU原则,一些语句逐渐老化,最终被清理出共享池;这样就导致shared_pool_size里面命中率下降,共享池碎片增多,可用内存空间不足。而为了维护共享池内部

3、结构,需要使用latch,一种内部生命周期很短的lock,这将使用大量的cpu资源,使得性能急剧下降。不使用绑定变量违背了oracle的sharedpool的设计原则。编写java程序时,我们习惯都是定义JAVA的程序变量,放入SQL语句中,如Stringv_id='xxxxx';Stringv_sql='selectnamefromtable_awhereid='+v_id;以上代码,看起来是使用了变量v_id,但这却是java的程序变量,而不是oracle的绑定变量,语句传递到数据库后,此java的程序变量已经被替换成具体的常量值,变成:select*fromtab

4、le_awherename='xxxxx';假定这个语句第一次执行,会进行硬分析。后来,同一段java代码中v_id值发现变化(v_id='yyyyyy'),数据库又接收到这样的语句:select*fromtable_awherename='yyyyyy';ORACLE并不认为以上两条语句是相同的语句,因此对第二条语句会又做一次硬分析。这两条语句的执行计划可是一样的!其实,只需将以上java代码改成以下这样,就使用了oracle的绑定变量:Stringv_id='xxxxx';Stringv_sql='selectnamefromtable_awhereid=?';//

5、嵌入绑定变量stmt=con.prepareStatement(v_sql);stmt.setString(1,v_id);//为绑定变量赋值stmt.executeQuery();在Java中,结合使用setXXX系列方法,可以为不同数据类型的绑定变量进行赋值,从而大大优化了SQL语句的性能。许翠二〇一〇年四月十六日

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。