仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1498|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计PreparedStatement

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:55:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解From:www.theserverside.com-->SMTH
翻译:SuperMMX

为何PreparedStatement很主要,和如何"准确"利用他们.

数据库有一个艰辛的事情.它们不休地从很多客户端读取SQL查询,对数据举行尽
大概高效的查询.处置语句大概成为一个价值较高的操纵,可是如今数据库都是很
好的计划,如许这个坚苦被减到最小.可是这些优化必要使用程序开辟者的帮忙,
这篇文章给你展现一下如何准确利用PreparedStatement来大度地匡助数据库实行
这些优化.

一个数据库如何实行一条语句?

明显,不要但愿这里有很多细节;我们只看一下对这篇文章对照主要的部分.当一个
数据库吸收到一条语句的时分,数据库引擎起首剖析这条语句,检察语法毛病.一
旦语句剖析了,数据库必要找出最无效的办法来实行这条语句.这个盘算起来价值
很年夜.数据库反省甚么索引(假如有的话)能有所匡助,大概它是不是能全体读出一张
表中一切的纪录.数据库依据这些关于数据库所存数据的统计数字来找出最好的
举措.一旦制定出查询计划,就能够由数据库引擎来实行.

必要CPU来发生会见计划.幻想的情形,假如我们把不异的语句给数据库发送两
次,我们希冀数据库重用第一笔记录的会见计划.这会比第二次从头发生计划要使
用较少的CPU.

语句缓冲

数据库能够举行调治来做语句缓冲.一般包括一些范例的语句缓冲.缓冲利用语句
自己作为关头字,会见计划和响应的语句存储在缓冲区中.如许就同意数据库引擎
对之前实行过的语句所利用的会见计划举行重用.举个例子来讲,假如我们向数据
库发送如许一条语句"selecta,bfromtwherec=2",盘算好的会见计划就放进缓冲
区了.假如我们今后再利用一样的语句,数据库就可以重用之前的会见计划,如许就
能节俭CPU.

可是要注重,整条语句是一个关头字.比方,假如我们厥后发送的语句是"selecta,b
fromtwherec=3",那末就不会找出之前的会见计划.由于"c=3"和"c=2"是纷歧
样的.以是,比方:

For(intI=0;I<1000;++I)
{
PreparedStatementps=conn.prepareStatement("selecta,bfromt
wherec="+I);
ResultSetrs=Ps.executeQuery();
Rs.close();
Ps.close();
}

这里不会用到缓冲.每次轮回向数据库发送一条分歧的SQL语句.每次轮回都从头
盘算新的会见计划,用这类办法我们会华侈大批的CPU周期.可是,看看下一个片
段:

PreparedStatementps=conn.prepareStatement("selecta,bfromtwherec
=?");
For(intI=0;I<1000;++I)
{
ps.setInt(1,I);
ResultSetrs=ps.executeQuery();
Rs.close();
}
ps.close();

如许就会高效很多.发送给数据库的语句在sql中利用?标记来参数化.这意味着
每次轮回发送的是统一条语句,在"c=?"部分带有分歧的参数.如许就同意数据库
重用语句的会见计划,是程序在数据库外部运转得更高效.这基础上能使你的程序
运转得更快,大概使数据库用户能更多地利用CPU.

PreparedStatement和J2EE服务器

当我们利用J2EE服务器的时分,事变会变得加倍庞大.一般情形下,一个事后筹办
好的语句(preparedstatement)是和一个独自的数据库毗连相干联的.当毗连封闭时,
语句就被抛弃了.一样平常来讲,一个胖客户端使用程序在失掉一个数据库毗连后会一
直坚持到程序停止.它会利用两种办法创立一切的语句:孔殷创立(eagerly)大概懒
惰创立(lazily).Eagerly是说,当程序启动时全体创立.Lazily是说随用随创立.孔殷
的办法会在程序启动时有些延时,可是一旦程序启动今后,运转很好.怠惰的办法启
动很快,可是当程序运转时,事后筹办的语句在第一次利用是创立.这就会形成功能
不屈衡,晓得一切的语句都筹办好了,可是终极程序会和孔殷办法一样快.哪种
最好要看你必要的是疾速启动仍是平衡的功能.

一个J2EE使用程序所带来的成绩就是它不克不及像如许事情.它只在一个哀求的保存
工夫中坚持一个毗连.这意味着在他处置每个哀求时城市从头创立语句,就不象
胖客户端只创立一次,而不是每个哀求都创立那样无效,

当J2EE服务器给你的程序一个毗连时,并非一个真实的毗连,而是一个经由包装
的.你能够经由过程检察谁人毗连的类的名字来查验一下.它不是一个数据库的JDBC
毗连,是你的服务器创立的一个类.一般,假如你挪用一个毗连的close办法,那末
jdbc驱动程序会封闭这个毗连.我们但愿的是当J2EE使用程序挪用close的时分,
毗连会前往到毗连池中.我们经由过程计划一个代办署理的jdbc毗连类来做这些,但看起来
就象是实践的毗连.当我们挪用这个毗连的任何办法时,代办署理类就会把哀求前递给
实践的毗连.可是,当我们挪用相似close的办法时,其实不挪用实践毗连的close方
法,只是复杂地把毗连前往给毗连池,然后把代办署理毗连标志为有效,如许当它被应
用程序从头利用时,我们会失掉非常.

包装长短常有效的,由于它匡助J2EE使用程序服务器完成者对照伶俐地加上事后
筹办语句的撑持.当程序挪用Connection.prepareStatement时,由驱动程序前往一
个PreparedStatement对象.当使用程序失掉它时,保留这个句柄,而且在哀求完成
时,封闭哀求之前封闭这个句柄.可是,在毗连前往到毗连池以后,今后被一样大概
另外一个使用程序重用时,那末,我们就实际上但愿一样的PreparedStatement前往给
使用程序.

J2EEPreparedStatement缓冲

J2EEPreparedStatement缓冲由J2EE服务器外部的毗连池办理器利用一个缓冲区
来完成.J2EE服务器在毗连池中保留一个一切数据库的事后筹办语句的一个列表.
当一个程序挪用一个毗连的prepareStatement办法时,服务器先反省这个语句是不是
已有了,假如是,响应的PreparedStatement就在缓冲区内,就前往给使用程序,如
果不是,哀求就会传送给jdbc驱动程序,哀求/事后筹办语句对象就会到场到缓冲
区里.

关于每个毗连我们必要一个缓冲区,由于这是jdbc驱动程序的事情请求.任何返
回的preparedStatement都是针对这个毗连的.

假如我们要使用缓冲区的上风,要利用和后面不异的划定规矩.我们必要利用参数话的
查询,如许它们就会和已在缓冲区的某一个婚配.年夜多半使用程序服务器都同意
你调剂缓冲区的巨细.

提要

总之,关于事后筹办语句,我们应当利用参数化的查询.如许同意数据库重用已存
在的会见计划,从而加重数据库的包袱.如许的缓冲区是这个数据库局限的,以是
你能够布置你一切的使用程序,利用类似的参数化的SQL,就会进步如许的缓冲区
计划的效力,由于一个使用程序可使用另外一个使用程序的语句.一个使用服务器
的上风也在于此,由于会见数据库的逻辑应当会合在数据会见层上(OR映照,实体
bean大概间接JDBC).

最初,事后筹办语句的准确利用也让你使用使用程序服务器的事后筹办语句的缓冲
区的优点.会进步你的使用程序的功能,由于使用程序经由过程对之前的事后筹办语句
的重用削减JDBC驱动程序挪用的次数.如许使它能和胖客户真个效力合作,而且
往失落了不克不及坚持一个临时毗连的害处.

假如你利用参数化的事后筹办语句,就能够进步数据库和你的服务器真个代码的效
率.这些进步城市同意你的使用程序进步功能.
那这个对象有什么意义?现在很多用javabean的人就不能保证对象有完整的意义,不成熟的使用模式等导致代码疯狂增长,调试维护的时间要得多得多。在说性能之前,先说说你这个比较的来历。据说微软为了证明。net比java好。
透明 该用户已被删除
沙发
发表于 2015-1-20 16:59:04 来自手机 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
海妖 该用户已被删除
板凳
发表于 2015-1-29 13:11:40 | 只看该作者
是一种为 Internet发展的计算机语言
蒙在股里 该用户已被删除
地板
发表于 2015-1-29 23:03:37 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
因胸联盟 该用户已被删除
5#
发表于 2015-2-5 14:34:41 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
若相依 该用户已被删除
6#
发表于 2015-2-6 02:04:59 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小女巫 该用户已被删除
7#
发表于 2015-2-8 21:27:42 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
精灵巫婆 该用户已被删除
8#
发表于 2015-2-22 11:37:54 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
不帅 该用户已被删除
9#
发表于 2015-2-25 14:23:13 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
活着的死人 该用户已被删除
10#
发表于 2015-3-7 21:45:19 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
只想知道 该用户已被删除
11#
发表于 2015-3-9 18:36:58 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
兰色精灵 该用户已被删除
12#
发表于 2015-3-11 02:17:07 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
谁可相欹 该用户已被删除
13#
发表于 2015-3-20 18:02:28 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
小魔女 该用户已被删除
14#
发表于 2015-4-4 17:31:41 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
愤怒的大鸟 该用户已被删除
15#
发表于 2015-4-7 16:22:00 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
变相怪杰 该用户已被删除
16#
发表于 2015-4-12 04:43:55 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
山那边是海 该用户已被删除
17#
发表于 2015-4-21 19:55:45 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
金色的骷髅 该用户已被删除
18#
发表于 2015-4-27 04:59:49 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
柔情似水 该用户已被删除
19#
发表于 2015-4-30 11:24:12 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
冷月葬花魂 该用户已被删除
20#
发表于 2015-4-30 14:20:45 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表