仓酷云

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

[学习教程] JAVA编程:JSP进修――周全剖析JDBC(4)

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

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

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

x
关于第二点:俺问问你,如果是企业级项目的话,诸如RMI,EJB,等一些关键技术,这些难道都不需要学么?如果光是使用jsp,servlet,javabean的话。js怎样使用JDBC发送SQL语句?

  Statement对象用于将SQL语句发送到数据库中。实践上有三种Statement对象,它们都作为在给定毗连上实行SQL语句的包涵器:Statement、PreparedStatement(它从Statement承继而来)和CallableStatement(它从PreparedStatement承继而来)。它们都公用于发送特定范例的SQL语句:Statement对象用于实行不带参数的复杂SQL语句;PreparedStatement对象用于实行带或不带IN参数的预编译SQL语句;CallableStatement对象用于实行对数据库已存储历程的挪用。

  Statement接口供应了实行语句和猎取了局的基础办法;PreparedStatement接口增加了处置IN参数的办法;而CallableStatement增加了处置OUT参数的办法。

  1.创立Statement对象

  创建了到特定命据库的毗连以后,便可用该毗连发送SQL语句。Statement对象用Connection的办法createStatement创立,以下列代码段中所示:

Connectioncon=DriverManager.getConnection(url,"sunny","");
Statementstmt=con.createStatement();


  为了实行Statement对象,被发送到数据库的SQL语句将被作为参数供应给Statement的办法:

  ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable2");

  2.利用Statement对象实行语句

  Statement接口供应了三种实行SQL语句的办法:executeQuery、executeUpdate和execute。利用哪个办法由SQL语句所发生的内容决意。

  办法executeQuery用于发生单个了局集的语句,比方SELECT语句。办法executeUpdate用于实行INSERT、UPDATE或DELETE语句和SQLDDL(数据界说言语)语句,比方CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修正表中零行或多行中的一列或多列。executeUpdate的前往值是一个整数,唆使受影响的行数(即更新计数)。关于CREATETABLE或DROPTABLE等不操纵行的语句,executeUpdate的前往值总为零。

  实行语句的一切办法都将封闭所挪用的Statement对象确当前翻开了局集(假如存在)。这意味着在从头实行Statement对象之前,必要完成对以后ResultSet对象的处置。应注重,承继了Statement接口中一切办法的PreparedStatement接口都有本人的executeQuery、executeUpdate和execute办法。Statement对象自己不包括SQL语句,因此必需给Statement.execute办法供应SQL语句作为参数。PreparedStatement对象其实不必要SQL语句作为参数供应给这些办法,由于它们已包括预编译SQL语句。

  CallableStatement对象承继这些办法的PreparedStatement情势。关于这些办法的PreparedStatement或CallableStatement版本,利用查询参数将抛出SQLException。

  3.语句完成

  当毗连处于主动提交形式时,个中所实行的语句在完成时将主动提交或复原。语句在已实行且一切了局前往时,即以为已完成。关于前往一个了局集的executeQuery办法,在检索完ResultSet对象的一切行时该语句完成。关于办法executeUpdate,当它实行时语句即完成。但在多数挪用办法execute的情形中,在检索一切了局集或它天生的更新计数以后语句才完成。

  有些DBMS将已存储过程当中的每条语句视为自力的语句;而别的一些则将全部历程视为一个复合语句。在启用主动提交时,这类不同就变得十分主要,由于它影响甚么时分挪用commit办法。在前一种情形中,每条语句独自提交;在后一种情形中,一切语句同时提交。

  4.封闭Statement对象

  Statement对象将由Java渣滓搜集程序主动封闭。而作为一种好的编程作风,应在不必要Statement对象时显式地封闭它们。这将当即开释DBMS资本,有助于制止潜伏的内存成绩。

  5.利用办法execute

  execute办法应当仅在语句能前往多个ResultSet对象、多个更新计数或ResultSet对象与更新计数的组应时利用。当实行某个已存储历程或静态实行未知SQL字符串(即使用程序程序员在编译时未知)时,有大概呈现多个了局的情形,只管这类情形很少见。比方,用户大概实行一个已存储历程,而且该已存储历程可实行更新,然后实行选择,再举行更新,再举行选择,等等。一般利用已存储历程的人应晓得它所前往的内容。

  由于办法execute处置十分规情形,以是猎取其了局必要一些特别处置其实不足为怪。比方,假定已知某个历程前往两个了局集,则在利用办法execute实行该历程后,必需挪用办法getResultSet取得第一个了局集,然后挪用得当的getXXX办法猎取个中的值。要取得第二个了局集,必要先挪用getMoreResults办法,然后再挪用getResultSet办法。假如已知某个历程前往两个更新计数,则起首挪用办法getUpdateCount,然后挪用getMoreResults,并再次挪用getUpdateCount。

  关于不晓得前往内容,则情形更加庞大。假如了局是ResultSet对象,则办法execute前往true;假如了局是Javaint,则前往false。假如前往int,则意味着了局是更新计数或实行的语句是DL命令。在挪用办法execute以后要做的第一件事变是挪用getResultSet或getUpdateCount。挪用办法getResultSet能够取得两个或多个ResultSet对象中第一个对象;或挪用办法getUpdateCount能够取得两个或多个更新计数中第一个更新计数的内容。

  当SQL语句的了局不是了局集时,则办法getResultSet将前往null。这大概意味着了局是一个更新计数或没有别的了局。在这类情形下,判别null真正寄义的独一办法是挪用办法getUpdateCount,它将前往一个整数。这个整数为挪用语句所影响的行数;假如为-1则暗示了局是了局集或没有了局。假如办法getResultSet已前往null(暗示了局不是ResultSet对象),则前往值-1暗示没有别的了局。也就是说,当以下前提为真时暗示没有了局(或没有别的了局):

  ((stmt.getResultSet()==null)&&(stmt.getUpdateCount()==-1))

  假如已挪用办法getResultSet并处置了它前往的ResultSet对象,则有需要挪用办法getMoreResults以断定是不是有别的了局集或更新计数。假如getMoreResults前往true,则必要再次挪用getResultSet来检索下一个了局集。如上所述,假如getResultSet前往null,则必要挪用getUpdateCount来反省null是暗示了局为更新计数仍是暗示没有别的了局。

  当getMoreResults前往false时,它暗示该SQL语句前往一个更新计数或没有别的了局。因而必要挪用办法getUpdateCount来反省它是哪种情形。在这类情形下,当以下前提为真时暗示没有别的了局:

  ((stmt.getMoreResults()==false)&&(stmt.getUpdateCount()==-1))

  上面的代码演示了一种办法用来确认已会见挪用办法execute所发生的全体了局集和更新计数:

stmt.execute(queryStringWithUnknownResults);
while(true){
introwCount=stmt.getUpdateCount();
if(rowCount>0){//它是更新计数
System.out.println("Rowschanged="+count);
stmt.getMoreResults();
continue;
}
if(rowCount==0){//DDL命令或0个更新
System.out.println("NorowschangedorstatementwasDDLcommand");
stmt.getMoreResults();
continue;
}
//实行到这里,证实有一个了局集
//或没有别的了局
ResultSetrs=stmt.getResultSet();
if(rs!=null){
...//利用元数据取得关于了局集列的信息
while(rs.next()){
...//处置了局
stmt.getMoreResults();
continue;
}
break;//没有别的了局



什么时候上述的三种开发工具能和三为一,什么时候java的竞争力才更强,才有机会拉拢更多的程序员投入到对java的开发上,因为到时的开发工具将会比.net的更简单。还有一点也很关键,什么时候java推出的jsf能成为真正意义上的标准。
小女巫 该用户已被删除
沙发
发表于 2015-1-21 09:52:24 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
飘灵儿 该用户已被删除
板凳
发表于 2015-1-22 06:58:40 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
若天明 该用户已被删除
地板
发表于 2015-1-25 15:55:25 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
第二个灵魂 该用户已被删除
5#
发表于 2015-2-2 23:08:38 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
admin 该用户已被删除
6#
发表于 2015-2-8 19:36:42 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
小妖女 该用户已被删除
7#
发表于 2015-2-16 01:15:52 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
灵魂腐蚀 该用户已被删除
8#
发表于 2015-2-16 03:45:02 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
活着的死人 该用户已被删除
9#
发表于 2015-3-1 19:22:51 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
只想知道 该用户已被删除
10#
发表于 2015-3-4 11:05:07 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
再现理想 该用户已被删除
11#
发表于 2015-3-11 18:32:24 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
谁可相欹 该用户已被删除
12#
发表于 2015-3-16 20:12:31 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
因胸联盟 该用户已被删除
13#
发表于 2015-3-17 00:38:12 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
分手快乐 该用户已被删除
14#
发表于 2015-3-19 06:09:09 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
海妖 该用户已被删除
15#
发表于 2015-3-19 08:56:11 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
若相依 该用户已被删除
16#
发表于 2015-3-25 03:39:25 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
17#
发表于 2015-3-27 01:18:31 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
精灵巫婆 该用户已被删除
18#
发表于 2015-4-1 04:10:07 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
柔情似水 该用户已被删除
19#
发表于 2015-4-7 12:29:33 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
兰色精灵 该用户已被删除
20#
发表于 2015-4-9 11:20:12 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 21:07

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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