|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。JDBCTM指南:进门2-毗连
2-毗连
本概述是从《JDBCTMDatabaseAccessfromJavaTM:ATutorialandAnnotatedReference》这本书中摘引来的。JavaSoft今朝正在筹办这本书。这本书是一本教程,同时也是JDBC的主要参考手册,它将作为Java系列的构成部分在1997年春季由Addison-Wesley出书公司出书。
2.1概述
Connection对象代表与数据库的毗连。毗连历程包含所实行的SQL语句和在该毗连上所前往的了局。一个使用程序可与单个数据库有一个或多个毗连,大概可与很多数据库有毗连。
2.1.1翻开毗连
与数据库创建毗连的尺度办法是挪用DriverManager.getConnection办法。该办法承受含有某个URL的字符串。DriverManager类(即所谓的JDBC办理层)将实验找到可与谁人URL所代表的数据库举行毗连的驱动程序。DriverManager类存有已注册的Driver类的清单。当挪用办法getConnection时,它将反省清单中的每一个驱动程序,直到找到可与URL中指定的数据库举行毗连的驱动程序为止。Driver的办法connect利用这个URL来创建实践的毗连。
用户可绕过JDBC办理层间接挪用Driver办法。这在以下特别情形下将很有效:当两个驱动器可同时毗连到数据库中,而用户必要明白地选用个中特定的驱动器。但一样平常情形下,让DriverManager类处置翻开毗连这类事将更加复杂。
下述代码显现怎样翻开一个与位于URL"jdbc:odbc:wombat"的数据库的毗连。所用的用户标识符为"oboy",口令为"12Java":
Stringurl="jdbc:odbc:wombat";
Connectioncon=DriverManager.getConnection(url,"oboy","12Java");
2.1.2一样平常用法的URL
因为URL常引发搅浑,我们将先对一样平常URL作复杂申明,然后再会商JDBCURL。
URL(一致资本定位符)供应在Internet上定位资本所需的信息。可将它设想为一个地点。
URL的第一部分指定了会见信息所用的协定,前面老是随着冒号。经常使用的协定有"ftp"(代表“文件传输协定”)和"http"(代表“超文本传输协定”)。假如协定是"file",暗示资本是在某个当地文件体系上而非在Internet上(下例用于暗示我们所形貌的部分;它并不是URL的构成部分)。
ftp://javasoft.com/docs/JDK-1_apidocs.zip
http://java.sun.com/products/jdk/CurrentRelease
file:/home/haroldw/docs/books/tutorial/summary.html
URL的其他部分(冒号前面的)给出了数据资本所处地位的有关信息。假如协定是file,则URL的其他部分是文件的路径。关于ftp和http协定,URL的其他部分标识了主机并可选地给出某个更细致的地点路径。比方,以下是JavaSoft主页的URL。该URL只标识了主机:
http://java.sun.com
从该主页入手下手扫瞄,就能够进到很多别的的网页中,个中之一就是JDBC主页。JDBC主页的URL更加详细,它看起来相似:
http://java.sun.com/products/jdbc
2.1.3JDBCURL
JDBCURL供应了一种标识数据库的办法,可使响应的驱动程序能辨认该数据库并与之创建毗连。实践上,驱动程序编程员将决意用甚么JDBCURL来标识特定的驱动程序。用户不用体贴怎样来构成JDBCURL;他们只须利用与所用的驱动程序一同供应的URL便可。JDBC的感化是供应某些商定,驱动程序编程员在机关他们的JDBCURL时应当遵守这些商定。
因为JDBCURL要与各类分歧的驱动程序一同利用,因而这些商定应十分天真。起首,它们应同意分歧的驱动程序利用分歧的计划来定名数据库。比方,odbc子协定同意(但并非请求)URL含有属性值。
第二,JDBCURL应同意驱动程序编程员将统统所需的信息编进个中。如许就能够让要与给定命据库对话的applet翻开数据库毗连,而不必请求用户往做任何体系办理事情。
第三,JDBCURL应同意某种水平的直接性。也就是说,JDBCURL可指向逻辑主机或数据库名,而这类逻辑主机或数据库名将由收集定名体系静态地转换为实践的称号。这可使体系办理员不用将特定主机声明为JDBC称号的一部分。收集定名服务(比方DNS、NIS和DCE)有多种,而关于利用哪一种定名服务并没有限定。
JDBCURL的尺度语法以下所示。它由三部分构成,各部分间用冒号分开:
jdbc::
JDBCURL的三个部分可分化以下:
jdbc─协定。JDBCURL中的协定老是jdbc。
─驱动程序名或数据库毗连机制(这类机制可由一个或多个驱动程序撑持)的称号。子协定名的典范示例是"odbc",该称号是为用于指定ODBC作风的数据资本称号的URL专门保存的。比方,为了经由过程JDBC-ODBC桥来会见某个数据库,能够用以下所示的URL:
jdbc:odbc:fred
本例中,子协定为"odbc",子称号"fred"是当地
ODBC数据资本。
假如要用收集定名服务(如许JDBCURL中的数据库称号不用是实践称号),则定名服务能够作为子协定。比方,可用以下所示的URL:
jdbc:dcenaming:accounts-payable
本例中,该URL指定了当地DCE定名服务应当将
数据库称号"accounts-payable"剖析为更加详细的
可用于毗连实在数据库的称号。
─一种标识数据库的办法。子称号能够依分歧的子协定而变更。它还能够有子称号的子称号(含有驱动程序编程员所选的任何外部语法)。利用子称号的目标是为定位数据库供应充足的信息。前例中,由于ODBC将供应其他部分的信息,因而用"fred"就已充足。但是,位于远程服务器上的数据库必要更多的信息。比方,假如数据库是经由过程Internet来会见的,则在JDBCURL中应将收集地点作为子称号的一部分包含出来,且必需遵守以下所示的尺度URL定名商定:
//主机名:端口/子协定
假定"dbnet"是个用于将某个主机毗连到Internet上的协定,则JDBCURL相似:
jdbc:dbnet://wombat:356/fred
2.1.4"odbc"子协定
子协定odbc是一种特别情形。它是为用于指定ODBC作风的数据资本称号的URL而保存的,并具有以下特征:同意在子称号(数据资本称号)前面指定恣意多个属性值。odbc子协定的完全语法为:
jdbc:odbc:[;=]*
因而,以下都是正当的jdbc:odbc称号:
jdbc:odbc:qeor7
jdbc:odbc:wombat
jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:qeora;UID=kgh;PWD=fooey
2.1.5注册子协定
驱动程序编程员可保存某个称号以将之用作JDBCURL的子协定名。当DriverManager类将此称号加到已注册的驱动程序清单中时,为之保存该称号的驱动程序应能辨认该称号并与它所标识的数据库创建毗连。比方,odbc是为JDBC-ODBC桥而保存的。示例之二,假定有个Miracle公司,它大概会将"miracle"注册为毗连到其MiracleDBMS上的JDBC驱动程序的子协定,从而使其别人都没法利用这个称号。
JavaSoft今朝作为非正式代办署理卖力注册JDBC子协定称号。要注册某个子协定称号,请发送电子邮件到下述地点:
jdbc@wombat.eng.sun.com
2.1.6发送SQL语句
毗连一旦创建,便可用来向它所触及的数据库传送SQL语句。JDBC对可被发送的SQL语句范例不加任何限定。这就供应了很年夜的天真性,即同意利用特定的数据库语句或乃至于非SQL语句。但是,它请求用户本人卖力确保所触及的数据库能够处置所发送的SQL语句,不然将自作自受。比方,假如某个使用程序试图向不撑持贮存程序的DBMS发送贮存程序挪用,就会失利并将抛出非常。JDBC请求驱动程序应最少能供应ANSISQL-2EntryLevel功效才可算是切合JDBC尺度TM的。这意味着用户最少可托赖这一尺度级其余功效。
JDBC供应了三个类,用于向数据库发送SQL语句。Connection接口中的三个办法可用于创立这些类的实例。上面列出这些类及其创立办法:
Statement─由办法createStatement所创立。Statement对象用于发送复杂的SQL语句。
PreparedStatement─由办法prepareStatement所创立。PreparedStatement对象用于发送带有一个或多个输出参数(IN参数)的SQL语句。PreparedStatement具有一组办法,用于设置IN参数的值。实行语句时,这些IN参数将被送到数据库中。PreparedStatement的实例扩大了Statement,因而它们都包含了Statement的办法。PreparedStatement对象有大概比Statement对象的效力更高,由于它已被预编译过并寄存在那以供未来利用。
CallableStatement─由办法prepareCall所创立。CallableStatement对象用于实行SQL贮存程序─一组可经由过程称号来挪用(就象函数的挪用那样)的SQL语句。CallableStatement对象从PreparedStatement中承继了用于处置IN参数的办法,并且还增添了用于处置OUT参数和INOUT参数的办法。
以下所列供应的办法能够疾速决意使用哪一个Connection办法来创立分歧范例的SQL语句:
createStatement办法用于:
复杂的SQL语句(不带参数)
prepareStatement办法用于:
带一个或多个IN参数的SQL语句
常常被实行的复杂SQL语句
prepareCall办法用于:
挪用已贮存历程
2.1.7事件
事件由一个或多个如许的语句构成:这些语句已被实行、完成并被提交或复原。当挪用办法commit或rollback时,以后事件即告就停止,另外一个事件随即入手下手。
缺省情形下,新毗连将处于主动提交形式。也就是说,当实行完语句后,将主动对谁人语句挪用commit办法。这类情形下,因为每一个语句都是被独自提交的,因而一个事件只由一个语句构成。假如禁用主动提交形式,事件将要比及commit或rollback办法被显式挪用时才停止,因而它将包含上一次挪用commit或rollback办法以来一切实行过的语句。关于第二种情形,事件中的一切语句将作为组来提交或复原。
办法commit使SQL语句对数据库所做的任何变动成为永世性的,它还将开释事件持有的全体锁。而办法rollback将弃往那些变动。
偶然用户在另外一个变动失效前不想让此变动失效。这可经由过程禁用主动提交并将两个更新组合在一个事件中来到达。假如两个更新都是乐成的,则挪用commit办法,从而使两个更新了局成为永世性的;假如个中之一或两个更新都失利了,则挪用rollback办法,以将值恢复为举行更新之前的值。
年夜多半JDBC驱动程序都撑持事件。现实上,切合JDBC的驱动程序必需撑持事件。DatabaseMetaData给出的信息形貌DBMS所供应的事件撑持程度。
2.1.8事件断绝级别
假如DBMS撑持事件处置,它必需有某种路子来办理两个事件同时对一个数据库举行操纵时大概产生的抵触。用户可指定事件断绝级别,以指明DBMS应当花多年夜精神来办理潜伏抵触。比方,当事件变动了某个值而第二个事件却在该变动被提交或复原前读取该值时该怎样办?假定第一个事件被复原后,第二个事件所读取的变动值将是有效的,那末是不是可同意这类抵触?JDBC用户可用以下代码来唆使DBMS同意在值被提交前读取该值(“dirty读取”),个中con是以后毗连:
con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED);
事件断绝级别越高,为制止抵触所花的精神也就越多。Connection接口界说了五级,个中最初级别指定了基本就不撑持事件,而第一流别则指定当事件在对某个数据库举行操纵时,任何别的事件不得对谁人事件正在读取的数据举行任何变动。一般,断绝级别越高,使用程序实行的速率也就越慢(因为用于锁定的资本泯灭增添了,而用户间的并发操纵削减了)。在决意接纳甚么断绝级别时,开辟职员必需在功能需乞降数据分歧性需求之间举行衡量。固然,实践所能撑持的级别取决于所触及的DBMS的功效。
当创立Connection对象时,其事件断绝级别取决于驱动程序,但一般是所触及的数据库的缺省值。用户可经由过程挪用setIsolationLevel办法来变动事件断绝级别。新的级别将在该毗连历程的残剩工夫内失效。要想只改动一个事件的事件断绝级别,必需在该事件入手下手行进行设置,并在该事件停止落后行复位。我们不倡始在事件的半途对事件断绝级别举行变动,由于这将当即触发commit办法的挪用,使在此之前所作的任何变动酿成永世性的。
通过视频学习比传统的大课堂学习更适合成人化的学习规律。有人说大课堂气氛好,学习氛围浓,热闹,可以认识很多人。 |
|