PreparedStatement和Statement比较.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PreparedStatement和Statement比较 PreparedStatement的最大的优点就是可以动态设置参数,然后其缺点也来源于此,在执行SQL语句出错的时候,我们就没有办法看到完整的SQL语句,甚至也看不到设置的参数,这非常不便于调试。比如说,执行一个非常长的sql语句的时候,报错说插入的值超出范围,大部分JDBC驱动都不会报告是哪个字段出了问题PreparedStatement可以避免一些编码的麻烦,如单引号的问题完全可以用PreparedStatement来代替Statement 基于以下的原因: ? 代码的可读性和可维护性虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次: ? stmt.executeUpdate(insert ? into ? tb_name ? (col1,col2,col3,col4) ? values ? (+var1+,+var2+,+var3+,+var4+)); ? perstmt ? = ? con.prepareStatement(insert ? into ? tb_name ? (col1,col2,col3,col4) ? values ? (?,?,?,?)); ? perstmt.setString(1,var1); ? perstmt.setString(2,var2); ? perstmt.setString(3,var3); ? perstmt.setString(4,var4); ? perstmt.executeUpdate(); ? 二、PreparedStatement尽最大可能提高性能每一种数据库都会尽最大努力对预编译语句提供最大的性能优化因为预编译语句有可能被重复调用所以语句在被DB的编译器编译后的执行代码被缓存下来那么下次调用时只要是相同的预编译语句就不需要编译只要将参数直接传入编译过的语句执行代码中(相当于一个)就会得到执行这并不是说只有一个Connection中多次执行的预编译语句被缓存而是对于整个DB中,只要预编译的语句语法和缓存中匹配那么在任何时候就可以不需要再次编译而可以直接执行而statement的语句中即使是相同一操作而由于每次操作的数据不同所以使整个语句相匹配的机会极小几乎不太可能匹配比如: ? insert ? into ? tb_name ? (col1,col2) ? values ? (11,22); ? insert ? into ? tb_name ? (col1,col2) ? values ? (11,23); ? 即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配没有缓存语句的意义事实是没有数据库会对普通语句编译后的执行代码缓存这样每执行一次都要对传入的语句编译一次? ? 当然并不是所以预编译语句都一定会被缓存数据库本身会用一种策略比如使用频度等因素来决定什么时候不再缓存已有的预编译结果以保存有更多的空间存储新的预编译语句我对PreparedStatement和Statement的性能测试了一下: ?测试代码如下: java 代码Connection?con?=?getOraConnection();?? String?sql?=?select?id,name?from?test?where?id=;?? String?tempSql;?? int?count?=?1000;?? long?time?=?System.currentTimeMillis();?? for?(int?i?=?0;?i??count;?i++)?{?? ????Statement?st?=?con.createStatement();?? ????tempSql=sql+(int)?(Math.random()?*?100);?? ????st.executeQuery(tempSql);?? ????st.close();?? }?? System.out.println(st?cost:?+?(System.currentTimeMillis()?-?time));?? ?? String?psql?=?select?id,name?from?test?where?id=?;?? time?=?System.currentTimeMillis();?? for?(int?i?=?0;?i??count;?i++)?{?? ????int?id=(int)?(Math.random()?*?100);?? ????Prepared

文档评论(0)

82393aa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档