




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、jdbc培训讲座日本事业部 copyright 863soft, 2009.修改历史修改历史2009年10月08号 作成 v1.0 jdbc概述 jdbc基础 事务处理 jdbc常用api 数据库连接池 jdbc连接各种数据库的方法目目 录录jdbcjdbc概述概述 jdbc(java database connectivity)称为java数据库连接,它是一种用于数据库访问的应用程序api,由一组用java语言编写的类和接口组成,有了jdbc就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。换言之,有了jdbc,就不必为访问mysql数据库专门写一个程序,为访问o
2、racle又专门写一个程序等等,只需用 jdbc写一个程序就够了,它可以向相应数据库发送sql语句。 jdbcjdbc的优点和缺点的优点和缺点 jdbc api用于连接java应用程序与各种关系数据库。这使得人们在建立客户/服务器应用程序时,通常把java作为编程语言,把任何一种浏览器作为应用程序的友好界面,把internet或intranet作为网络主干,把有关的数据库作为数据库后端。以下是使用jdbc的优缺点。 优点如下:优点如下: 1.jdbc api与odbc十分相似,有利于用户理解。 2.jdbc使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。 3
3、.jdbc支持不同的关系数据库,使得程序的可移植性大大加强。 4.用户可以使用jdbc-odbc桥驱动器将jdbc函数调用转换为odbc。 5.jdbc api是面向对象的,可以让用户把常用的方法封装为一个类,备后用。 缺点如下:缺点如下: 1.使用jdbc,访问数据记录的速度会受到一定程度的影响。 2.jdbc结构中包含了不同厂家的产品,这就给更改数据源带来了很大的麻烦。 jdbcjdbc基础基础 1 1、采用、采用jdbcjdbc访问数据库的基本步骤:访问数据库的基本步骤: a.载入jdbc驱动程序 b.定义连接url c.建立连接 d.创建statement对象 e.执行查询或更新 f.
4、结果处理 g.关闭连接 2 2、载入、载入jdbcjdbc驱动程序:驱动程序: (1)、为了使代码尽可能地灵活,我们要避免对类名的引用进行硬编码(hard-coding),因此我们可以采用从properties文件中载入驱动程序的方法,也可以使用在服务器中配置数据源(datasource)的方法来避免在代码中硬编码 (2)、在开发过程中要保证classpath设定中包括驱动程序jar文件所在的路径。在web服务器上部署时要将jar文件放在web应用的web-inf/lib目录下。如果多个web应用使用相同的数据库驱动程序可以将jar文件放置在服务器使用的公共目录commonlib中3 3、定义
5、连接、定义连接urlurl: 载入jdbc驱动程序之后,必须指定数据库服务器位置。指向数据库的url所使用的协议是: jdbc:子协议,并且载入服务器的主机名、端口、数据库名(或引用)。如:oracle 的连接url: jdbc:oracle:thin:1:1521:umv2 jdbc:oracle:采用oracle驱动程序 thin:指连接服务器所采用的模式 1:服务器的地址 1521:服务器的监听端口 umv2:数据库名 4 4、建立连接、建立连接: : (1)、一个数据库连接(connection)可以通过其自身的getmetadata()来获
6、取它的自身信息 (2)、默认情况下一个数据库的连接是自动提交模式的(auto-commit),也就是说每当一个sql语句, 被执行后其改变结果都会被自动提交,如果auto-commit模式被关闭,那么方法commit()必须被显式调用以提交改变结果,否则的话所有对数据库操作的结果都不会被保存5 5、创建、创建statementstatement对象对象: : 在同一时间下,每个statement对象只能打开一个resultset对象。所以,假如有两个同样结果的结果集在交叉访问,那么这两个结果集必定为两个不同的statement对象所创建。如果在打开一个新的结果集的时候存在一个已经打开的结果集,
7、则这个已经存在的结果集会被隐式的关闭。 6 6、执行查询或更新:、执行查询或更新: 在statement对象中可以执行如下的操作: a.查询操作:executequery(sql语句) b.维护操作:executeupdate(sql语句) c.批处理操作:executebath() 7 7、结果处理:、结果处理: (1)、resultset中行的第一列索引为1,而非0,访问resultset中的数据时要使用列名,而非索引,但要注意使用列名作为查询条件是大小写敏感的。 (2)、jdbc1.0中,我们只能在resultset中向前移动;在jdbc2.0中,我们可以在resultset中向下(ne
8、xt)或向上(previous)移动,同样也可以移到特定的行(relative,absolute) (3)、默认情况下resultset是不可更新的,且只能向前移动。下面的代码显示了如何创建一个可滚动的、对更新敏感的resultset statement stmt = con.createstatement( resultset.type_scroll_insensitive,resultset.concur_updatable);resultset rs = stmt.executequery(select a, b from table2); (4)、resultset和resultset
9、metadata没有直接提供方法返回查询所返回的行数。然而,在jdbc2.0中,可以通过调用last()方法将游标定位到resultset的最后一行,然后调用getrow()方法获取当前的行号。在jdbc1.0中,确定行数的惟一方式是重复调用resultset的next()方法,直到它返回false为至 8 8、关闭连接:、关闭连接: 在关闭数据库连接时应该以resultset、statement、connection的顺序进行。 jdbcjdbcpreparedstatement(preparedstatement(预备语句预备语句) ) 1 1、preparedstatementprepa
10、redstatement(预备语句)的创建:(预备语句)的创建: 首先按照标准的格式创建参数化语句,在实际使用之前发送参数到数据库进行编译。用问号表示语句中应该为具体的值所替换的位置。每次使用预备语句时,只需要使用相应的setxxx调用,替换语句中标记出来的参数。然后就可以和常规的语句一样,使用executequery或execute/executeupdate修改表中的数据。 例如: connection connection = drivermanager .getconnection (url,username,password); / 创建带问号的参数化语句 string templa
11、te = update music set price=? where id=? ; preparedstatement statement=connection.preparestatement(template); float newprices = getnewprices(); int recordingids = getids(); for(int i=0; irecordingids.length;i+)/ 用setxxx代替? statement.setfloat(1,newpricesi); statement.setint(2,recordingidsi);/ 执行预备语句
12、statement.execute(); 2 2、使用、使用preparedstatementpreparedstatement的好处:的好处:(1)、依赖于服务器对预编译查询的支持,以及驱动程序处理原始查询的效率,预备语句在性能上的优势可能有很大的不同。(2)、安全是预备语句的另外一个特点,我们推荐在通过html表单接受用户输入,然后对数据库进行更新时,一定要使用预备语句或存储过程。(3)、预备语句还能够正确地处理嵌入在字符串中的引号以及处理非字符数据(比如向数据库发送序列化后的对象) jdbcjdbccallablestatement(callablestatement(可调用语句可调用语
13、句) ) 1 1、使用、使用callablestatement(callablestatement(可调用语句可调用语句) )的优缺点:的优缺点:(1)、优点:语法错误可以在编译时找出来,而非在运行期间;数据库存储过程的运行可能比常规的sql查询快得多;程序员只需知道输入和输出参数,不需了解表的结构。另外,由于数据库语言能够访问数据库本地的一下儿功能(序列,触发器,多重游标),因此用它来编写存储过程可能要比使用java编程语言要简易一些。(2)、缺点:存储过程的商业逻辑在数据库服务器上运行,而非客户机或web服务器。而行业的发展趋势是尽可能多地将商业逻辑移出数据库,将它们放在javabean组
14、件(或者在大型的系统中,enterprise javabean组件)中,在web构架上采用这种方式的主要动机是:数据库访问和网络i/o常常是性能的瓶颈。 2 2、使用、使用callablestatementcallablestatement在在javajava中调用数据库存储过中调用数据库存储过程:程:(1 1)、定义对数据库过程的调用)、定义对数据库过程的调用 a无参数过程: call procedure_name b. 仅有输入参数的过程:call procedure_name(?,?.) c有一个输出参数的过程:? call procedure_name d既有输入参数又有输出参数的过程
15、?=call procedure_name(?,?.) 在过程的4种形式中要注意过程可能返回多个输出参数,并且参数的索引值从输出参数开始。因此前面最后例子中,第一个输入参数的索引值是2而不是1。(2 2)、为过程准备)、为过程准备callablestatementcallablestatement string procedure = “ ? = call procedure_name(?,?) ”; callablestatement statement = connection.preparecall(procedure);(3 3)、提供输入参数的值)、提供输入参数的值 在执行存储过程之
16、前,我们需要调用与所要设置的项以及参数的类型相对应的setxxx,替换标记出来的输入参数 statement.setstring(2,”name”); (4 4)、注册输出参数的类型)、注册输出参数的类型 我们必须使用registeroutparameter注册每个输出参数的jdbc类型 statement.registeroutparameter(n,type);(5 5)、执行这个存储过程)、执行这个存储过程 statement.execute();(6 6)、访问返回的输出参数)、访问返回的输出参数 可以通过调用getxxx访问每个对应的输出参数例:connection connecti
17、on = drivermanager.getconnection(url,username,password); string procedure = “ ? = call myproc(?,?)”; callablestatement statement = connection.preparecall(procedure); statement.setstring(2,); statement.setfloat(3,); statement.registeroutparameter(1,types.integer); statement.execute(); int row = state
18、ment.getint(1); 3 3、in/outin/out参数处理参数处理 callablestatement 中定义的所有方法都用于处理 out 参数或 inout 参数的输出部分:注册 out 参数的 jdbc 类型(一般 sql 类型)、从这些参数中检索结果,或者检查所返回的值是否为 jdbc null。 (1 1)、创建)、创建 callablestatement callablestatement 对象对象 callablestatement 对象是用 connection 方法 preparecall 创建的。下例创建 callablestatement 的实例,其中含有对已
19、储存过程 gettestdata 调用。该过程有两个变量,但不含结果参数: callablestatement cstmt = con.preparecall(call gettestdata(?, ?); 其中?占位符为in、out还是inout参数,取决于已储存过程gettestdata。(2 2)、)、inin和和outout参数参数 将in参数传给 callablestatement 对象是通过 setxxx 方法完成的。该方法继承自 preparedstatement。所传入参数的类型决定了所用的setxxx方法(例如,用 setfloat 来传入 float 值等)。 如果已储存过
20、程返回 out 参数,则在执行 callablestatement 对象以前必须先注册每个 out 参数的 jdbc 类型(这是必需的,因为某些 dbms 要求 jdbc 类型)。注册 jdbc 类型是用 registeroutparameter 方法来完成的。语句执行完后,callablestatement 的 getxxx 方法将取回参数值。正确的 getxxx 方法是为各参数所注册的 jdbc 类型所对应的 java 类型。换言之, registeroutparameter 使用的是 jdbc 类型(因此它与数据库返回的 jdbc 类型匹配),而 getxxx 将之转换为 java 类型
21、。 作为示例,下述代码先注册 out 参数,执行由 cstmt 所调用的已储存过程,然后检索在 out 参数中返回的值。方法 getbyte 从第一个 out 参数中取出一个 java 字节,而 getbigdecimal 从第二个 out 参数中取出一个 bigdecimal 对象(小数点后面带三位数): callablestatement cstmt = con.preparecall(call gettestdata(?, ?); cstmt.registeroutparameter(1, java.sql.types.tinyint); cstmt.registeroutparamet
22、er(2, java.sql.types.decimal, 3); cstmt.executequery(); byte x = cstmt.getbyte(1); java.math.bigdecimal n = cstmt.getbigdecimal(2, 3); callablestatement 与 resultset 不同,它不提供用增量方式检索大 out 值的特殊机制。 (3 3)、)、inoutinout参数参数 既支持输入又接受输出的参数(inout 参数)除了调用 registeroutparameter 方法外,还要求调用适当的 setxxx 方法(该方法是从 prepar
23、edstatement 继承来的)。setxxx 方法将参数值设置为输入参数,而 registeroutparameter 方法将它的 jdbc 类型注册为输出参数。setxxx 方法提供一个 java 值,而驱动程序先把这个值转换为 jdbc 值,然后将它送到数据库中。这种 in 值的 jdbc 类型和提供给 registeroutparameter 方法的 jdbc 类型应该相同。然后,要检索输出值,就要用对应的 getxxx 方法。例如,java 类型为byte 的参数应该使用方法 setbyte 来赋输入值。应该给registeroutparameter 提供类型为 tinyint 的
24、 jdbc 类型,同时应使用 getbyte 来检索输出值。 下例假设有一个已储存过程 revisetotal,其唯一参数是 inout 参数。方法setbyte 把此参数设为 25,驱动程序将把它作为 jdbc tinyint 类型送到数据库中。接着,registeroutparameter 将该参数注册为 jdbc tinyint。执行完该已储存过程后,将返回一个新的 jdbc tinyint 值。方法 getbyte 将把这个新值作为 java byte 类型检索。callablestatement cstmt = con.preparecall( call revisetotal(?)
25、; cstmt.setbyte(1, 25); cstmt.registeroutparameter(1, java.sql.types.tinyint); cstmt.executeupdate(); byte x = cstmt.getbyte(1); (4 4)、先检索结果,再检索)、先检索结果,再检索 out out 参数参数 由于某些 dbms 的限制,为了实现最大的可移植性,建议先检索由执行callablestatement 对象所产生的结果,然后再用 callablestatement.getxxx 方法来检索 out 参数。如果 callablestatement 对象返回多个
26、 resultset 对象(通过调用 execute 方法),在检索 out 参数前应先检索所有的结果。这种情况下,为确保对所有的结果都进行了访问,必须对 statement 方法 getresultset、getupdatecount 和getmoreresults 进行调用,直到不再有结果为止。检索完所有的结果后,就可用 callablestatement.getxxx 方法来检索 out 参数中的值。(5 5)、检索作为)、检索作为outout参数的参数的nullnull值值 返回到 out 参数中的值可能会是jdbc null。当出现这种情形时,将对 jdbc null 值进行转换以使
27、 getxxx 方法所返回的值为 null、0 或 false,这取决于getxxx 方法类型。对于 resultset 对象,要知道0或false是否源于jdbcnull的唯一方法,是用方法wasnull进行检测。如果 getxxx 方法读取的最后一个值是 jdbc null,则该方法返回 true,否则返回 flase。jdbcjdbctransation(transation(事务处理事务处理) ) 1 1、transation(transation(事务处理事务处理) )的概念:的概念: 在更新数据库时,默认情况下,更改是永久性写入到数据库。然而这种默认行为可以通过编写程序来关闭。在自
28、动交付关闭的情况下,如果在更新时发生问题,则对数据库的每个更改都能够取消(或者说回退到最初的值)。如果更新成功,那么之后可以将这些更改永久性提交给数据库。这种方式也称为事务管理。 我们需要确保,要么所有的操作都发生,要么所有的操作都不发生。这就是事务管理的原则。 2 2、在、在javajava中使用中使用transation(transation(事务管理事务管理) )保证数据库保证数据库的完整性:的完整性: 我们使用try-catch-finally块来正确地应对事务管理,首先,记录自动提交的当前状态。然后,在try块中,调用setautocommit(false)并执行一系列的查询或更新。
29、如果发生故障,则在catch块中调用rollback;如果事务成功,则在try块的结尾调用commit。不管哪种方式,都在finally块中重置自动提交的状态。例如:connection connection=drivermanager.getconnection(url,username,password);boolean autocommit = connection.getautocommit(); statement statement; try connection.setautocommit(false); / 关闭数据库的自动提交 statement = connection.c
30、reatestatement(); statement.execute(); mit(); / 如果所有语句执行成功则提交事务 catch(sqlexception sqle) connection.rollback(); / 如果有异常发生则回滚所有的事务 finally if(statement!=null)statement.close(); connection.setautocommit(autocommit); / 重置自动提交的状态 上面的代码中,从drivermanager获取连接的语句在try/catch块之外。这样除非成功获取连接,否则不会调用rollback。如果把获取连
31、接的语句放在try/catch快之内,一旦在连接成功后发生异常,由于rollback的作用会把已经建立的连接断开。但是getconnection方法也会抛出sqlexception异常这个异常要么被外围的方法重新抛出,要么在单独的try/catch块内捕获。jdbcjdbc的常用的常用apiapi 1、 、connection接口:接口:java代码createstatement()/创建数据库连接preparestatement(stringsql)/创建预处理语句preparecall(stringsql)/创建可调用语句getautocommit()/获取自动提交的模式setautoco
32、mmit()/设置自动提交的模式commit()/提交所执行的sql语句rollback()/回滚所执行的sql语句getmetadata()/获取一个databasemetadata对象,该对象包含了有关数据库的基本信息close()/关闭数据库连接isclose()/判断数据库连接是否超时或被显示关闭2 2、statementstatement接口:接口: execute(string sql) /执行sql语句,如果返回值是结果集则为true,否则为falseexecutequery(string sql) /执行sql语句,返回值为resultset executeupdate(str
33、ing sql) /执行sql语句,返回值为所影响的行数 addbatch(string sql) /向当前statement对象的命令列表中添加新的批处理sql语句 clearbatch() /清空当前statement对象的命令列表 executebatch() /执行当前statement对象的批处理语句,返回值为每个语句所影响的函数数组 getconnection() /返回创建了该statement对象的connection对象 getquerytimeout() /获取等待处理结果的时间 setquerytimeout() /设置等待处理结果的时间 3 3、resultsetres
34、ultset接口:接口:first()/beforefirst() /将游标移动到resultset中第一条记录(的前面) last()/afterlast() /将游标移动到resultset中最后一条记录(的后面) absolute(int column) /将游标移动到相对于第一行的指定行,负数则为相对于最后一条记录 relative(int rows) /将游标移动到相对于当前行的第几行,正为向下,负为向上 next() /将游标下移一行 previous() /将游标上移一行 insertrow() /向当前resultset和数据库中被插入行处插入一条记录 deleterow()
35、/将当前resultset中的当前行和数据库中对应的记录删除 updaterow() /用当前resultset中已更新的记录更新数据库中对应的记录 cancelupdate() /取消当前对resultset和数据库中所做的操作findcolumn(stringcolumnname)/返回当前resultset中与指定列名对应的索引getrow()/返回resultset中的当前行号refreshrow()/更新当前resultset中的所有记录getmetadata()/返回描述resultset的resultsetmetadata对象isafterlast()/是否到了结尾isbefor
36、efirst()/是否到了开头isfirst()/是否第一条记录islast()/是否最后一条记录wasnull()/检查列值是否为null值,如果列的类型为基本类型,且数据库中的值为0,那么这项检查就很重要。由于数据库null也返回0,所以0值和数据库的null不能区分。如果列的类型为对象,可以简单地将返回值与null比较close()/关闭当前resultset 4 4、resultsetmetadataresultsetmetadata接口:接口: getcolumncount() /返回resultset中列的数目 getcolumnname() /返回列在数据库中的名称 getcol
37、umntype() /返回列的sql类型 isreadonly() /表示该数据项是否为只读值 isnullable() /表示该列是否可以存储null 数据库连接池1 1、数据库连接池(、数据库连接池(connection poolconnection pool)的工作原理)的工作原理 (1 1)、基本概念及原理)、基本概念及原理 jdbc作为一种数据库访问技术,具有简单易用的优点。但使用这种模式进行web应用程序开发,存在很多问题:首先,每一次web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库
38、操作,或许感觉不出系统有多大的开销。可是对于现在的web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。 其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。 数据库连接池的基本思想就是为数据库连接建
39、立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。 (2 2)、服务器自带的连接池)、服务器自带的连接池 jdbc的api中没有提供连接池的方法。一些大型的web应用服务器如bea的weblogic和ibm的websphere等提供了连接池的机制,但是必须有其第三方的专用类方法支持连接池的用法。 2 2连接池关键问题分析连接池关键问题分析(1)、并发
40、问题为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为java语言自身提供了对并发管理的 支持,使用synchronized关键字即可确保线程是同步的。使用方法为直接在类方法前面加上synchronized关键字,如:public synchronized connection getconnection()(2)、多数据库服务器和多用户对于大型的企业级应用,常常需要同时连接不同的数据库(如连接oracle和sybase)。如何连接不同的数据库呢?我们采用的策略是: 设计一个符合单例模式的连接池管理类,在连接池管理类的唯一实例被创建时读取一个资源文
41、件,其中资源文件中存放着多个数据库的url地址 ()用户名()密码 ()等信息。(3)、事务处理我们知道,事务具有原子性,此时要求对数据库的操作符合“all-all-nothing”原则,即对于一组sql语句要么全做,要么全不做。在java语言中,connection类本身提供了对事务的支持,可以通过设置connection的autocommit属性为 false,然后显式的调用commit或rollback方法来实现。但要高效的进行connection复用,就必须提供相应的事务支持机制。可采用 每一个事务独占一个连接来实现,这种方法可以大大降低事务管理的复杂性。(4)、连接池的分配与释放连接
42、池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用度,从而降低建立新连接的开销,同时还可以加快用户的访问速度。(5)、连接池的配置与维护连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minconn)和最大连接数(maxconn)来控制 连接池中的连接。 具体的实现具体的实现 javax.sql.rowset 包添加了对缓冲数据源的支持,即可以将缓冲池缓冲的数据库连接看作是一个是实实在在的数据源服务来使用。rowset 包提供了好几个接口用于处理数据库缓冲池,主要的接口有:1、datasource 接口:datasource 接口的实例
43、对象代表了存在于中间层服务器中的缓冲数据源服务。使用它可以返还数据库缓冲池中现存的数据库连接,datasource 接口的实例对象实际上是某个jndi 服务的提供者,在使用它之前,该jndi 服务对象必须先在中间层服务器环境中注册,并且和某个服务名绑定在一起,然后它才能被别的java 应用程序调用。2、connectionpooldatasource 接口:该接口可以用于创建一个被缓冲于缓冲池的数据库物理连接,它有可能会被datasource 接口的实例对象调用。3、pooledconnection 接口:该接口代表被缓冲的数据库连接,它定义了一个getconnection()方法使用这个方法
44、可以返回java.sql.connection 接口的实例对象。在继续连接池之前,先讲一下在继续连接池之前,先讲一下jndijndi概述概述 我们大家每天都不知不觉地使用了命名服务。例如,当你在web浏览器输入url,http:/ 时,dns(domain name system,域名系统)将这个符号url名转换成通讯标识(ip地址)。命名系统中的对象可以是dns记录中的名 称、应用服务器中的ejb组件(enterprise javabeans component)、 ldap(lightweight directory access protocol)中的用户profile。 目录服务是命名
45、服务的自然扩展。两者之间的关键差别是目录服务中对象可以有属性(例如,用户有email地址),而命名服务中对象没有属性。因此,在 目录服务中,你可以根据属性搜索对象。jndi允许你访问文件系统中的文件,定位远程rmi注册的对象,访问象ldap这样的目录服务,定位网络上的 ejb组件. 对于象ldap 客户端、应用launcher、类浏览器、网络管理实用程序,甚至地址薄这样的应用来说,jndi是一个很好的选择.javajava和和tomcattomcat应用。应用。java中代码context ic = new initialcontext();datasource source = (datas
46、ource) ic .lookup(java:comp/env/jdbc/books);connection = source.getconnection();tomcat的conf/context.xml中的配置,在根节点context中加入 属性名称说明name指定resource的jndi名称auth指定管理resource的manager(container:由容器创建和管理|application:由web应用创建和管理)type指定resource所属的java类maxactive指定连接池中处于活动状态的数据库连接的最大数目maxidle指定连接池中处于空闲状态的数据库连接的最大
47、数目maxwait 指定连接池中的连接处于空闲的最长时间,超过这个时间会抛出异常,取值为-1,表示可以无限期等待补充:如果是mysql的数据库 username=ccs password=secret url=jdbc:mysql:/localhost:3306/ccs driverclassname=com.mysql.jdbc.driver maxactive=20 maxidle=10/ 把数据库驱动(mssqlserver2.jar)的.jar文件,加入到tomcat的commonlib中注意:在注意:在tomcate5.5tomcate5.5以下的版本,还需要项目工程的以下的版本,还
48、需要项目工程的web.xmlweb.xml中添加,资源引用中添加,资源引用 jdbc/books javax.sql.datasource container jdbcjdbc连接各种数据库的方法连接各种数据库的方法 下面罗列了各种数据库使用jdbc连接的方式,可以作为一个手册使用.(1)、oracle8/8i/9i数据库(thin模式) class.forname(“oracle.jdbc.driver.oracledriver“).newinstance(); string url=“jdbc:oracle:thin:localhost:1521:orcl“; /orcl为数据库的sid
49、string user=“test“; string password=“test“; connection conn= drivermanager.getconnection(url,user,password) (2)、db2数据库 class.forname(“com.ibm.db2.jdbc.app.db2driver “).newinstance(); string url=“jdbc:db2:/localhost:5000/sample“; /sample为你的数据库名 string user=“admin“; string password=“; connection conn= drivermanag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年施工电梯三级安全教育试题及答案
- 2025年《医疗废物分类目录》及相关知识试题及答案
- 地产项目建设施工现场安全管理方案
- 化学工业环境影响评估报告
- 餐饮业食品安全监管信息化技术应用现状与2025年发展趋势报告
- 餐饮业供应链整合与2025年成本控制下的餐饮企业供应链协同效应研究报告
- 美甲店引流活动方案
- 线上送课活动方案
- 美容线上促销活动方案
- 组织团建节目活动方案
- MOOC 跨文化交际通识通论-扬州大学 中国大学慕课答案
- GB/T 27696-2011一般起重用4级锻造吊环螺栓
- GB/T 14365-2017声学机动车辆定置噪声声压级测量方法
- 2022年东台市城市建设投资发展集团有限公司招聘笔试试题及答案解析
- 保险金信托基础知识课件
- 高中必修人教A版高中数学必修1指数函数一 完整版课件PPT
- QC080000有害物质管理评审报告
- DB35∕T 2023-2021 生猪无抗饲养技术规范
- 倪海厦人纪之针灸 全
- 防空应急疏散演练方案防空应急疏散演练方案
- 《结构化学》课件第二章-原子的结构与性质
评论
0/150
提交评论