




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 JDBC连接数据库JDBC工作原理工作原理 通过通过JDBC对数据库执行对数据库执行SQL语句语句 基于数据源访问数据库基于数据源访问数据库 高级开发技巧高级开发技巧本章主要内容本章主要内容JDBC工作原理工作原理 通过通过JDBC对数据库执行对数据库执行SQL语句语句 基于数据源访问数据库基于数据源访问数据库 高级开发技巧高级开发技巧pJDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问据库访问API的一种高级抽象,它主要包含一些通用的接口类。的一种高级抽象,它主要包含一些通用的接口类。真正的数据库访问操作实现是由各自
2、数据库厂商提供的。通常把真正的数据库访问操作实现是由各自数据库厂商提供的。通常把厂商提供的特定于数据库的访问厂商提供的特定于数据库的访问API称为数据库称为数据库JDBC驱动程序。驱动程序。pJDBC通过提供一个抽象的数据库接口,使得程序开发人员在编通过提供一个抽象的数据库接口,使得程序开发人员在编程时可以不用绑定在特定数据库厂商的程时可以不用绑定在特定数据库厂商的API上,大大增加了应用上,大大增加了应用程序的可移植性。在实际运行过程中程序代码通过程序的可移植性。在实际运行过程中程序代码通过JDBC访问数访问数据库时,仍旧需要调用特定于数据库的访问据库时,仍旧需要调用特定于数据库的访问API
3、!JDBC访问数据库层次结构访问数据库层次结构 o 要使服务器上的要使服务器上的J2EE应用能够通过应用能够通过JDBC访问数据库,访问数据库,必须将必须将JDBC驱动程序添加到应用服务器的驱动程序添加到应用服务器的JVM可以可以访问到的目录下。访问到的目录下。o 对于对于tomcat服务器,可以将数据库的服务器,可以将数据库的JDBC驱动拷贝驱动拷贝到到tomcat安装目录下的安装目录下的commonlib子目录下。子目录下。创建数据库连接,分为以下几步:创建数据库连接,分为以下几步:p首先注册数据库驱动程序。首先注册数据库驱动程序。pClass.forName(“org.git.mm.my
4、sql.Driver”);p然后根据具体的然后根据具体的JDBC URL地址,调用地址,调用DriverManager对象的对象的getConnection()来获取一个代表数据库连接的来获取一个代表数据库连接的java.sql.connectuion对象。对象。JDBC URL 的格式如下:jdbc:子协议:数据库定位器。MySQL数据库:jdbc:mysql:/机器名/数据库名Oracle数据库:jdbc:oracle:thin机器名:端口名:数据库名 给定具体的JDBC URL,获取数据库连接的方法是在DriverManager对象上调用getConnection()。这种方法有两种形式
5、:DriverManager.getConnection(url)DriverManager.getConnection(url,user,password)其中第二种方式需要输入用户名和密码信息进行身份认证。程序程序71:test.jsp 连接连接Mysql数据库成功数据库成功! 数据库连接测试数据库连接测试 JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧 java.sql.Statement 对象代表一条发送到数据库执行的对象代表一条发送到数据库执行的SQL语语句。有三种句。有三种 Statement 对象:对象:Statement 对象用于执行不
6、带对象用于执行不带参数的简单参数的简单 SQL 语句;语句;PreparedStatement 对象用于执行带对象用于执行带或不带参数的预编译或不带参数的预编译 SQL 语句;语句;CallableStatement 对象用对象用于执行对数据库存储过程的调用。于执行对数据库存储过程的调用。 Statement接口接口注意:继承了注意:继承了Statement 接口中所有方法的接口中所有方法的 PreparedStatement 接口也有接口也有自己的自己的 executeQuery、executeUpdate 和和 execute 方法。方法。Statement 对象本身不包含对象本身不包含
7、SQL 语句,因而必须给语句,因而必须给 Statement.execute 方法提供方法提供 SQL 语句作为参数。语句作为参数。PreparedStatement 对象并不将对象并不将 SQL 语句作为语句作为参数提供给这些方法,因为它们已经包含预编译参数提供给这些方法,因为它们已经包含预编译 SQL 语句。语句。CallableStatement 对象继承这些方法的对象继承这些方法的 PreparedStatement 形式。形式。对于这些方法的对于这些方法的 PreparedStatement 或或 CallableStatement 版本,使版本,使用查询参数将抛出用查询参数将抛出
8、SQLException。PreparedStatement接口接口PreparedStatement 实例包含已编译的实例包含已编译的 SQL 语句,这也是将其命名冠语句,这也是将其命名冠以以“Prepared”的原因。包含于的原因。包含于 PreparedStatement 对象中的对象中的 SQL 语句可具有一个或多个语句可具有一个或多个 IN 参数。参数。IN 参数的值在参数的值在 SQL 语句创建时语句创建时未被指定。相反的,该语句为每个未被指定。相反的,该语句为每个 IN 参数保留一个问号(参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前通过适当的作为占位符。
9、每个问号的值必须在该语句执行之前通过适当的 setXXX() 方法来提供。方法来提供。 由于由于 PreparedStatement 对象已预编译过,所以其执行速度要快于对象已预编译过,所以其执行速度要快于 Statement 对象。因此多次执行的对象。因此多次执行的 SQL 语句经常创建为语句经常创建为 PreparedStatement 对象,以提高效率。对象,以提高效率。ResultSet接口接口oResultSet对象代表对象代表SQL语句的执行结果集,它包含符合语句的执行结果集,它包含符合SQL语语句中条件的所有行。句中条件的所有行。o对于对于SQL语句执行结果的操作,实质上是对语句
10、执行结果的操作,实质上是对ResultSet对象的操对象的操作。作。oResult维护指向其当前数据行的光标。每调用一次维护指向其当前数据行的光标。每调用一次next()方法,方法,光标向下移动一行,最初光标位于第一行之前。光标向下移动一行,最初光标位于第一行之前。o方法方法getxxx()提供了获取当前行中某列值的途径。提供了获取当前行中某列值的途径。oStatement对象执行完毕后,将由对象执行完毕后,将由Java垃圾收集程序自动关闭,垃圾收集程序自动关闭,而作为一种好的编程风格,应在不需要而作为一种好的编程风格,应在不需要Statement对象时显示对象时显示关闭。关闭。o oo顾客信
11、息表顾客信息表o o o ID o 地址地址 o 电话电话 o o o o o o o o o o 执行带参数的执行带参数的SQL语句语句oooo查询条件查询条件oooo顾客姓氏:顾客姓氏:o oooooo oo顾客信息表顾客信息表o o o ID o 地址地址 o 姓名姓名 o o o o o o o o o o JDBC工作原理 通过JDBC对数据库执行SQL语句 基于数据源访问数据库 高级开发技巧 数据源是在数据源是在JDBC 2.0中引入的一个概念。在中引入的一个概念。在JDBC 2.0扩展包中定扩展包中定义了义了javax.sql.DataSource接口来描
12、述数据源的概念。如果用户希望接口来描述数据源的概念。如果用户希望建立一个数据库连接,通过查询在建立一个数据库连接,通过查询在JNDI(Java Naming and Directory Interface)服务中的数据源,可以从数据源中获取相应)服务中的数据源,可以从数据源中获取相应的数据库连接。这样程序开发人员就只需要获取一个逻辑名称,而的数据库连接。这样程序开发人员就只需要获取一个逻辑名称,而不是数据库登录的具体细节,这样代码的移植能力就更强。不是数据库登录的具体细节,这样代码的移植能力就更强。属性名称属性名称属性数据类型属性数据类型描述描述databaseNameString数据库名称,
13、即数据库的数据库名称,即数据库的SIDdataSourceNameString数据源接口实现类的名称。数据源接口实现类的名称。descriptionString对数据源的描述。对数据源的描述。networkProtocolString和服务器通讯使用的网络协议名。和服务器通讯使用的网络协议名。passwordString用户登录密码。用户登录密码。portNumberInt数据库服务器使用的端口,缺省值为数据库服务器使用的端口,缺省值为1521。serverNameString数据库服务器名称。数据库服务器名称。userString用户登录名。用户登录名。Server.xml(tomcat5.
14、0) factory org.apache.catalina.users.MemoryUserDatabaseFactory pathname conf/tomcat-users.xml maxWait 5000 maxActive 100 password 123 url jdbc:mysql:/localhost:3306/dacop driverClassName com.mysql.jdbc.Driver maxIdle 2 username root Context.xml(tomcat6.0) WEB-INF/web.xml !- - !- - Web.xml Oracle Dat
15、asource example jdbc/mysql javax.sql.DataSource Container 注注:1.在在tomcat 5.5以后的版本不写也可以以后的版本不写也可以 2.驱动程序需放在服务器驱动程序需放在服务器lib目录下目录下tryjavax.naming.InitialContext ctx = new javax.naming.InitialContext(); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(java:comp/env/jdbc/mysql); conn = ds.getC
16、onnection();preparedStmt =conn.prepareStatement(select customerid,address,phone from customer where firstname like ? );/设置参数设置参数String parm= request.getParameter(parm);preparedStmt.setString(1, %+parm+%);/执行执行Sql语句语句 sqlRst=preparedStmt.executeQuery (); %程序程序76:test2.jsp(片段)(片段)JDBC工作原理 通过JDBC对数据库执行
17、SQL语句 基于数据源访问数据库 高级开发技巧BLOB字段的处理字段的处理 /执行执行Sql语句语句 sqlRst=Stmt.executeQuery ( SQLString); while(sqlRst.next()java.sql.Blob blob=sqlRst.getBlob( data ); byte ab = blob.getBytes(1, (int)blob.length(); response.setContentType(image/gif); response.reset(); op.write(ab); op.flush(); op.close();Stmt.close
18、 (); conn.close();程序程序77:ShowImage.java(片段)(片段)/添加图片到数据库添加图片到数据库javax.naming.InitialContext ctx = new javax.naming.InitialContext();javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(java:/MySqlDS); conn = ds.getConnection();String filelocation =request.getParameter(file);File files = new File(filelocation); FileInputStream fis=new FileInputStream(files); preparedStmt = conn.prepareStatement( INSERT INTO album (name,data) +VALUES
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 请示整改报告范文
- HCIA路由交换技术实战(微课版)-课后习题答案
- 二零二五年度正规欠款合同范本:商业保理业务合作协议
- 二零二五养老院院民文化参观出行合作协议
- 二零二五年度高端定制门安装与设计合同
- 二零二五年度电梯维保服务与智能化升级合同范本
- 二零二五年度企业ERP系统采购合作协议
- MySQL教程(新体系-综合应用实例视频)(第4版)习题及答案 -第08章
- 二零二五年度教育行业年合同制工人养老保险合同
- 二零二五年度健康养老项目终止合作框架协议
- (正式版)HG∕T 21633-2024 玻璃钢管和管件选用规定
- 便与健康课件
- 自然辩证法概论课件:第二章马克思主义科学技术观
- “供应商融资安排”会计列报、披露问题研究
- 气道廓清技术及护理课件
- 中国黄金集团公司黄金工业项目初步设计
- 中医院新技术、新项目申请表、审批表及年季度工作报告表范本
- 《现代汉语语法》PPT课件(完整版)
- SAP培训讲义(FICO概览)V3-中石油
- 全国江苏小学科学学科教师基本功大赛试题汇总(共19页)
- 幕墙工程施工质量通病和防治措施方案
评论
0/150
提交评论