版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-1- 理解JDBC访问数据库的结构及原理 了解JDBC四种驱动类型 掌握JDBC访问数据库的步骤 掌握JDBC中的DriverManager类和Connection、ResultSet接口 掌握JDBC的常用查询接口 掌握JDBC对集元数据的访问 掌握JDBC的事务处理 目标第1页/共39页-2-JDBC Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成。 JDBC为数据库开发人员提供了一个标准的API,使他们能够用纯Java API来编写数据库应用程序。 使用JDB
2、C编写的程序能够自动地将SQL语句传送给相应的数据库管理系统。 JDBC扩展了Java的功能,由于Java语言本身的特点,使得JDBC具有简单、健壮、安全、可移植、获取方便等优势 。第2页/共39页-3-JDBC结构 JDBC API是Java开发工具包(JDK)的组成部份,由三部分组成:p JDBC驱动程序管理器驱动程序管理器 p JDBC驱动程序测试工具包驱动程序测试工具包p JDBC-ODBC桥桥 JDBC驱动程序管理器是JDBC体系结构的支柱,其主要作用是把Java应用程序连接到正确的JDBC驱动程序上。 JDBC驱动程序测试工具包为JDBC驱动程序的运行提供一定的可信度,只有通过JD
3、BC驱动程序测试包的驱动程序才被认为是符合JDBC标准的。 JDBC-ODBC桥使ODBC驱动程序可被用作JDBC驱动程序。其目标是为方便实现访问某些不常见的DBMS,它的实现为JDBC的快速发展提供了一条途径。 第3页/共39页-4-JDBC模型 JDBC既支持数据库访问的两层模型,也支持三层模型。 两层模型: 三层模型:第4页/共39页-5-JDBC类型 JDBC驱动类型可以归结为以下几类:p JDBC-ODBC桥加桥加ODBC驱动程序驱动程序p 本地本地API部份用部份用Java来编写的驱动程序来编写的驱动程序p JDBC网络纯网络纯Java驱动程序驱动程序p 本地协议纯本地协议纯Jav
4、a驱动程序驱动程序 JDBC-ODBC桥接ODBC驱动程序将JDBC翻译成ODBC,然后使用一个ODBC驱动程序与数据库进行通信。 本地API部份用Java来编写的驱动程序,这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。 JDBC网络纯Java驱动程序,这种驱动程序将JDBC转换为与DBMS无关的网络协议,这是最为灵活的JDBC驱动程序。 本地协议纯Java驱动程序,这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的专用网络协议。是Intranet访问的一个很实用的解决方法。第5页/共39页-6-ODBC
5、 ODBC(开放式数据库连接)API是使用最广的、用于访问关系数据库的编程接口,它可以将所有平台的关系型数据库连接起来。 ODBC模型结构: Java中通过JDBC-ODBC桥接方式实现ODBC功能调用:第6页/共39页-7-访问数据库 使用Oracle数据库作为JDBC的访问环境,需做如下准备工作:p 设置设置Oracle驱动的类路径:在驱动的类路径:在Oracle的安装路径下找到的安装路径下找到ojdbc14.jar包,将此工具包导入到包,将此工具包导入到工程中,或加入到环境变量工程中,或加入到环境变量CLASSPATH中。中。 p 创建演示表格及测试数据创建演示表格及测试数据CREATE
6、 TABLE student(sno VARCHAR2(5) PRIMARY KEY,-学生号name VARCHAR2(10) NOT NULL,-学生姓名age NUMBER(2) NOT NULL,-学生年龄sex CHAR(1) NOT NULL -性别,1:男,0:女);-添加测试数据INSERT INTO student VALUES(95001,张飞,23,1);INSERT INTO student VALUES(95002,关羽,23,1);INSERT INTO student VALUES(95003,貂蝉,23,0);INSERT INTO student VALUES
7、(95005,小乔,23,0);第7页/共39页-8-连接数据库 使用JDBC访问数据库的基本步骤一般如下:1.加载加载JDBC驱动程序驱动程序2.建立数据库连接建立数据库连接3.创建创建Statement对象对象4.执行执行SQL语句语句5.处理返回结果处理返回结果6.关闭创建的对象关闭创建的对象 第8页/共39页-9-加载JDBC驱动程序 加载驱动程序的方法:p 其中其中DriverName是要加载的是要加载的JDBC驱动程序名称。驱动程序名称根据数据库厂商提驱动程序名称。驱动程序名称根据数据库厂商提供的供的JDBC驱动程序的种类来确定。驱动程序的种类来确定。 加载JDBC-ODBC数据库
8、驱动程序的方法为: 加载Oracle数据库驱动程序的方法为: Class.forName(DriverName)第9页/共39页-10-创建数据库连接-1 创建一个数据库连接需要使用DriverManager DriverManager类是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。该类负责加载、注册JDBC驱动程序,管理应用程序和已注册的驱动程序的连接。 DriverManager的常用方法: 方法名方法名功能说明功能说明Static connection getConnection(String url, String user,
9、String password)用于建立到指定数据库 URL 的连接。其中url为 提供了一种标识数据库位置的方法,user为用户名,password为密码static Driver getDriver(String url) 用于返回能够打开url所指定的数据库的驱动程序 使用DriverManager类的getConnection()创建一个数据库连接的格式如下:Connection conn = DriverManager.getConnection(String url,String user,String password);第10页/共39页-11-创建数据库连接-2 URL提供了
10、一种标识数据库位置的方法,可以使相应的驱动程序能够识别该数据库并与它建立连接。 JDBC URL由三个部分组成:p 可以根据子协议的改变而变化。可以根据子协议的改变而变化。p 是子协议,指数据库连接的方式。是子协议,指数据库连接的方式。 对于JDBC-ODBC桥驱动的连接URL是: p odbc为子协议名称为子协议名称p data_source指本地指本地ODBC数据源的名字数据源的名字p attribute_name和和attribute_value用于指定建立连接所必须的信息,如用户名、密用于指定建立连接所必须的信息,如用户名、密码等码等 示例:jdbc:odbc:= jdbc : : C
11、onnection Conn=DriverManager.getConnection(jdbc:odbc:myscott,scott,tiger); 第11页/共39页-12-创建数据库连接-3 对于Oracle驱动的连结的URL是:p oracle为子协议名称为子协议名称p thin是是oracle数据库的一种连结方式数据库的一种连结方式p serverName为为Oracle数据库服务器名称,可以是一个域名,也可以是数据库服务器名称,可以是一个域名,也可以是IP地址地址p port为为Oracle数据库的端口号,默认为数据库的端口号,默认为1521p instance是数据库的实例名是数据
12、库的实例名 示例:jdbc:oracle:thin:serverName:port:instance Connection Conn = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, scott, tiger); 第12页/共39页-13-Connection Connection是一个接口,表示与数据库的连接,并拥有创建SQL语句的方法,以完成基本的SQL操作,同时为数据库事务处理提供提交和回滚的方法。p 一个应用程序可与单个数据库建立一个或多个连接,也可以与多个数据库建立一个应用程序可与单个数据库建立一个
13、或多个连接,也可以与多个数据库建立连接。连接。 Connection接口的常用方法:方法名方法名功能说明功能说明void close()断开连接,释放此Connection对象的数据库和JDBC资源Statement createStatement()创建一个Statement对象来将 SQL 语句发送到数据库void commit()用于提交SQL语句,确认从上一次提交/回滚以来进行的所有更改boolean isClosed()用于判断Connection 对象是否已经被关闭CallableStatement prepareCall(String sql)创建一个CallableStatem
14、ent对象来调用数据库存储过程PreparedStatement prepareStatement(String sql)创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库void rollback() 用于取消SQL语句,取消在当前事务中进行的所有更改第13页/共39页-14-创建Statement 创建完连接之后,可以通过此连接向目标数据库发送SQL语句。在发送SQL语句之前,须创建一个Statement类的对象,该对象负责将SQL语句发送给数据库。如果SQL语句运行后产生结果集,Statement对象会将结果集封装成ResultSet对象并返回。 通过调用C
15、onnection接口的createStatement方法来创建Statement对象,如:Statement smt = conn.createStatement(); 第14页/共39页-15-执行SQL语句 获取Statement对象之后,就可以使用该对象的executeQuery()方法来执行SQL语句,如: executeQuery()方法返回一个ResultSet对象,它包含了SQL的查询结果。 ResultSet rs = smt.executeQuery(SELECT sno,name,age FROM student);第15页/共39页-16-处理返回结果 在JDBC中,S
16、QL的查询结果使用ResultSet封装 ResultSet对象维持了执行某个SQL语句后满足条件的所有的行,并提供一系列访问结果集中数据的方法 通过调用ResultSet对象的方法,处理返回结果第16页/共39页-17-关闭创建的对象 当数据库操作执行完毕或退出应用前,需将数据库访问过程中建立的对象按顺序关闭,防止系统资源浪费。 关闭的次序是:p关闭结果集关闭结果集p关闭关闭Statement对象对象p关闭连接关闭连接 pJDBC实例实例:DBUtil.java第17页/共39页-18-操作数据库 在JDBC中要执行SQL查询语句可以通过执行一般查询、参数查询和存储过程三种方式。 三种不同的
17、接口:p Statementp PreparedStatementp CallableStatement第18页/共39页-19-Statement -1 Statement接口用于执行静态的SQL语句,静态的SQL语句不需要接收任何参数。Statement主要功能是将SQL语句传送给数据库,并将SQL语句的执行结果返回。 提交的SQL语句可以是:p SELECT查询语句查询语句p SQL DML语句,如:语句,如:INSERT、UPDATE或或DELETEp SQL DDL语句,如:语句,如:CREATE TABLE和和DROP TABLE Statement接口的常用方法及: 方法名方法名
18、功能说明功能说明void close()关闭Statement对象boolean execute(String sql) 执行给定的SQL语句,该语句可能返回多个结果ResultSet executeQuery(String sql)执行给定的SQL语句,该语句返回单个ResultSet对象int executeUpdate(String sql)执行给定SQL语句,该语句可能为INSERT、UPDATE或DELETE语句,或者不返回任何内容的SQL语句(如SQL DDL语句)Connection getConnection()获取生成此Statement对象的Connection对象int
19、getFetchSize()获取结果集合的行数,该数是根据此Statement对象生成的ResultSet对象的默认获取大小int getMaxRows()获取由此Statement对象生成的ResultSet对象可以包含的最大行数第19页/共39页-20-Statement -2 Statement接口提供了三种执行SQL语句的方法:p executeQuery()p executeUpdate()p execute() executeQuery()方法用于产生单个结果集的语句,例如SELECT语句。 executeUpdate()方法用于执行INSERT、UPDATE或DELETE语句以及
20、SQL DDL语句,如CREATE TABLE和DROP TABLE。p executeUpdate的返回值是一个整数,指示受影响的行数(即更新计数)的返回值是一个整数,指示受影响的行数(即更新计数)p 对于对于CREATE TABLE或或DROP TABLE等语句,等语句,executeUpdate的返回值总为零。的返回值总为零。 execute()方法用于执行返回多个结果集、多个更新计数或二者的组合p execute()方法比较特殊,一般是在用户不知道执行方法比较特殊,一般是在用户不知道执行SQL语句后会产生什么结果或可语句后会产生什么结果或可能有多种类型的结果产生时才会使用。能有多种类型
21、的结果产生时才会使用。 第20页/共39页-21-ResultSet -1 ResultSet封装了Statement的executeQuery()方法返回的结果集,即符合SQL语句中指定条件的所有行。 ResultSet维护了指向当前行的游标,并提供了许多方法用来操作结果集中的游标,同时提供了一套getXXX()方法对结果集中的数据进行访问。 ResultSet常用方法:方法名方法名功能说明功能说明void beforeFirst()将游标移动到结果集的开头(第一行之前)boolean next() 将游标从当前位置下移一行boolean last() 将游标移动到结果集的最后一行。int
22、getRow() 检索当前行编号String getString(int x)返回当前行第x列的值,类型为Stringint getInt(int x)返回当前行第x列的值,类型为intStatement getStatement() 获取生成结果集的 Statement 对象void close() 释放此 ResultSet 对象的数据库和 JDBC 资源ResultSetMetaData getMetaData() 获取结果集的列的编号、类型和属性第21页/共39页结果集由数据行组成,可以在一个循环中使用结果集由数据行组成,可以在一个循环中使用resultSet.next()方法来访问方
23、法来访问并获取每行数据并获取每行数据 一个结果集维持一个指向当前行的指针一个结果集维持一个指向当前行的指针 最初这个指针指向第一行之前,所以需调用最初这个指针指向第一行之前,所以需调用resultSet.next()方法访问第一行,然后再进行处理方法访问第一行,然后再进行处理 连续调用连续调用next()方法将使指针依次指向结果集各行方法将使指针依次指向结果集各行 当没有下一行时,返回值是当没有下一行时,返回值是false。-22-resultSet.next();数据行结果集第一列的序号为1而不是0第22页/共39页-23-ResultSet -2 ResultSet维护指向当前数据行的游标
24、,最初它位于第一行之前,每调用一次next()方法,游标向下移动一行,从而按照从上至下的次序获取ResultSet数据行。 ResultSet提供一套getXXX()方法对结果集中游标指向的行进行取值。在使用getXXX()方法取值时,一定要注意数据库的字段数据类型和Java的数据类型之间的匹配:SQL数据类型数据类型Java数据类型数据类型对应的方法对应的方法integer/intintgetInt()smallintshortgetShort()floatdoublegetDouble()doubledoublegetDouble()realfloatgetFloat()varchar/c
25、har/varchar2java.lang.StringgetString()booleanbooleangetBoolean()datejava.sql.DategetDate()timejava.sql.TimegetTime()blobjava.sql.BlobgetBlob()clobjava.sql.ClobgetClob()第23页/共39页-24-ResultSet -3 使用getXXX()方法进行取值时,可通过列名或列号标识要获取数据的列。如:p 列是从左至右编号的,并且从列是从左至右编号的,并且从1开始开始p 列名不区分大小写列名不区分大小写 示例:StatementDem
26、o.java Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(selectSql);while (rs.next() 行 + rs.getRow() + : + rs.getString(1)+ , + rs.getString(2) + , + rs.getString(3);/ 执行添加int count = stmt.executeUpdate(insertSql);添加 + count + 行!);/ 执行修改count = stmt.executeUpdate(updateSql);修改
27、 + count + 行!);/ 执行删除count = stmt.executeUpdate(deleteSql);String name = rs.getString(name);String name = rs.getString(1);第24页/共39页-25-PreparedStatement PreparedStatement接口是Statement接口的子接口,它继承了Statement的所有功能。 PrepardStatement接口有两大特点:p执行速度要快于执行速度要快于Statement对象对象pSQL语句中提供参数,提高程序的灵活性和执行效率语句中提供参数,提高程序的灵
28、活性和执行效率 PreparedStatement对象是通过Connection的prepareStatement()方法创建。 SQL语句中的参数使用“?”作为占位符 示例:PreparedStatementDemo.javaString insertSql = INSERT INTO student VALUES(?,?,?,?);PreparedStatement pstmt = conn.prepareStatement(insertSql);第25页/共39页-26-PreparedStatement 在执行带参数的SQL语句前,必须对“?”进行赋值。 PreparedStateme
29、nt接口中增添了大量的setXXX()方法,通过占位符的索引完成对输入参数的赋值,XXX根据不同的数据类型选择。 示例:/ 执行添加pstmt = conn.prepareStatement(insertSql);/ 为占位符赋值pstmt.setString(1, 95008);pstmt.setString(2, 周瑜);pstmt.setInt(3, 19);pstmt.setString(4, 1);int count = pstmt.executeUpdate();添加 + count + 行!);第26页/共39页-27-CallableStatement-1 存储过程是数据库中已
30、经存在的SQL语句。在JDBC中执行数据库中的存储过程可以使用CallableStatement对象。 CallableStatement接口继承了Statement接口和PreparedStatement接口,它具有两者的特点:p可以处理一般的可以处理一般的SQL语句,语句,p也可以处理输入参数,同时它还定义了也可以处理输入参数,同时它还定义了OUT(输出)参数以及(输出)参数以及INOUT(输入输出)参数的处理方法。(输入输出)参数的处理方法。 CallableStatement对象可以使用Connection类的prepareCall()方法 :pproc_name是需要调用的存储过程名
31、称。是需要调用的存储过程名称。 存储过程有参数,可使用占位符“?”代替,例如:CallableStatement cstmt=conn.prepareCall(call proc_name); CallableStatement cstmt=conn.prepareCall(call proc_name(?,?); 第27页/共39页-28-CallableStatement-2 在执行一个存储过程之前,必须先对其中的OUT参数进行类型注册,注册方式如下:p 第一个参数为对应存储过程占位符,第一个参数为对应存储过程占位符,p 第二个参数为对应占位符的变量的类型,通过的静态常量来指定,例如,第二
32、个参数为对应占位符的变量的类型,通过的静态常量来指定,例如,Types.FLOAT、Types.INTEGER等等。 示例:CallableStatementDemo.java 当使用getXXX()方法获取OUT参数的值时,XXX对应的Java类型必须与所注册的SQL类型相符。 如果存储过程有返回值,使用下面的方式调用 : registerOutParamenter(int index,int sqlType);;CallableStatement cstmt=conn.prepareCall(?=call proc_name(?,?); 第28页/共39页-29-元数据 元数据(Meta
33、Data),就是有关数据库和表格结构的信息,如:数据库中的表、表的列、表的索引、数据类型、对SQL的支持程度等信息。 元数据类型:pDatabaseMetaData pResultSetMetaData 第29页/共39页-30-DatabaseMetaData DatabaseMetaData接口主要是用来得到关于数据库的信息,如:表格的列表、系统函数、关键字、数据库产品名和数据库支持的JDBC驱动器名 DatabaseMetaData对象是通过Connection的getMetaData()方法获取。 DatabaseMetaData的方法可分为两大类:p 一类返回值为一类返回值为bool
34、ean型,多用以检查数据库或驱动器是否支持某项功能型,多用以检查数据库或驱动器是否支持某项功能p 另一类则用获取数据库或驱动器本身的某些特征值另一类则用获取数据库或驱动器本身的某些特征值第30页/共39页 示例:DatabaseMetaDataDemo.java-31-方法名方法名功能说明功能说明boolean supportsOuterJolns()检查数据库是否支持外部连接boolean supportsStoredProcedures()检查数据库是否支持存储过程String getURL()该方法的功能是返回用于连接数据库的URL地址String getUserName()该方法的功能
35、是获取当前用户名String getDatabaseProductName()该方法的功能是获取使用的数据库产品名String getDatabaseProductVersion()该方法的功能是获取使用的数据库版本号String getDriverName()该方法的功能是获取用以连接的驱动器名称String getProductVerslon()该方法的功能是获取用以连接的驱动器版本号ResultSet getTypeInfo()该方法的功能是获取数据库中可能取得的所有数据类型的描述第31页/共39页-32-ResultSetMetaData ResultSetMetaData接口主要用来
36、获取结果集的结构。如:结果集的列的数量、列的名字等。 ResultSetMetaData对象可以通过ResultSet的getMetaData()方法获取。 ResultSetMetaData的常用方法及功能: 示例:ResultSetMetaDataDemo.java方法名方法名功能说明功能说明int getColumnCount()返回此 ResultSet 对象中的列数String getColumnName(int column)获取指定列的名称int getColumnType(int column)检索指定列的SQL类型String getTableName(int column)
37、获取指定列的名称int getColumnDisplaySize(int column)指示指定列的最大标准宽度,以字符为单位boolean isAutoIncrement(int column)指示是否自动为指定列进行编号,这样这些列仍然是只读的int isNullable(int column)指示指定列中的值是否可以为nullboolean isSearchable(int column)指示是否可以在 where 子句中使用指定的列boolean isReadOnly(int column)指示指定的列是否明确不可写入第32页/共39页-33-事务操作 事务是构成单一逻辑工作单位的操作
38、集合。已提交事务是指成功执行完毕的事务,未能成功完成的事务称为中止事务,对中止事务造成的变更需要进行撤销处理,称为事务回滚。 事务具有ACID 4个特性:p 原子性:事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均原子性:事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。不执行。p 一致性:几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果一致性:几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。相一致。p 隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。须是透明的。p 持久性:对于任意已提交事务,系统必须保证该事务对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢结构质量保证措施
- 敏感指标:护理敏感质量指标的持续改进
- 泗洪县2026年科技创新专项资金关键核心技术项目20万申报指南
- 2026年AI数据中心配储项目可行性研究与投资测算模型
- 2026年高镍正极材料表面残碱成因及清洗包覆一体化工艺
- 2026年Geriatric 4Ms框架最重要事项思维活动能力移动能力用药监测应用
- 土地增值税法律制度的计算方法
- 隧道工程施工技术要领
- 2026年水上安全培训教育
- 2026年实验室辐射防护培训
- 八年级下册12诗经二首《关雎》公开课一等奖创新教学设计
- 关于组织2026年春季新员工入职培训的通知函9篇范本
- 部编人教版道德与法治五年级下册全册配套课件
- 2026年江西电力职业技术学院单招(计算机)考试参考题库附答案
- GB 6441-2025生产安全事故分类与编码
- 2026CSCO肝癌诊疗指南
- 芯片行业经销商制度规范
- IT技术介绍教学课件
- 【《某苹果采摘机械臂的总体方案设计案例》2300字】
- 2025年泰州职业技术学院单招职业技能测试题库附答案
- 2025中远海运财产保险自保有限公司高级管理人员招聘笔试历年典型考点题库附带答案详解
评论
0/150
提交评论