《Java数据库连接技术JDBC.ppt》由会员分享,可在线阅读,更多相关《Java数据库连接技术JDBC.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十二章第十二章 JDBCJDBC技技术贺玉珍贺玉珍计算机科学与技术系计算机科学与技术系1主要内容主要内容JDBC概述概述JDBCAPI的几个基本类和接口的几个基本类和接口应用应用JDBC访问数据库访问数据库计算机科学与技术系计算机科学与技术系2lODBC12.1JDBC概述概述计算机科学与技术系计算机科学与技术系lOpenDataBaseConnectivityl开放数据库互连开放数据库互连l是微软开发的、当前被业界广泛接受的、用于数据库是微软开发的、当前被业界广泛接受的、用于数据库访问的应用程序编程接口(访问的应用程序编程接口(API)。)。l是用是用C语言实现的,标准应用程序数据接口。语
2、言实现的,标准应用程序数据接口。l支持异构的支持异构的DBMS。312.1JDBC概述概述412.1JDBC概述概述lJDBC(JavaDataBaseConnectivity)lJDBC是为在是为在JavaApplet和应用程序中和应用程序中访问关系数访问关系数据库而设计的据库而设计的API类类和接口和接口。lJDBC独立于平台和数据库。独立于平台和数据库。l在在JDBC规范中,成功地提供了规范中,成功地提供了SQL数据库访问的数据库访问的JAVA方法方法。lJDBC结构如下图所示:结构如下图所示:计算机科学与技术系计算机科学与技术系5JDBC应用框架应用框架612.1JDBC概述概述12.
3、1.2JDBC驱动程序的类型驱动程序的类型l有四种,分别用于不同的场合。有四种,分别用于不同的场合。lJDBC-ODBC桥接驱动程序桥接驱动程序l本机应用编程接口部分本机应用编程接口部分Java驱动程序驱动程序l数据库中间件的纯数据库中间件的纯Java驱动程序驱动程序l直接连接数据库的纯直接连接数据库的纯Java驱动程序驱动程序计算机科学与技术系计算机科学与技术系7 JDBC驱动类型驱动类型812.1.2JDBC驱动类型驱动类型lJDBC-ODBC桥接驱动程桥接驱动程序序l这种类型的驱动实际是把所有这种类型的驱动实际是把所有jdbc的调用传递给的调用传递给odbc,再再由由odbc调用本地数据
4、库驱动代码调用本地数据库驱动代码ljdbc-odbc桥桥-odbc-厂商厂商DB代码代码-数据库数据库Serverl优点:只要本地机装有相关的优点:只要本地机装有相关的odbc驱动,那么采用驱动,那么采用jdbc-odbc桥几乎可以访问所有的数据库桥几乎可以访问所有的数据库l缺点:执行效率比较低;平台的依赖性。缺点:执行效率比较低;平台的依赖性。计算机科学与技术系计算机科学与技术系912.1.2JDBC驱动类型驱动类型l本机应用编程接口部分本机应用编程接口部分Java驱动程序驱动程序l直接把直接把jdbc调用转变为数据库的标准调用再去访问数调用转变为数据库的标准调用再去访问数据库。据库。l本地
5、本地api驱动驱动-厂商厂商DB代码代码-数据库数据库Serverl优点:这种驱动比起优点:这种驱动比起jdbc-odbc桥加桥加odbc执行效率执行效率大大提高了大大提高了缺点:仍然需要在客户端加载数据库厂商提供的代码库。缺点:仍然需要在客户端加载数据库厂商提供的代码库。这样就不适合基于这样就不适合基于internet的应用的应用计算机科学与技术系计算机科学与技术系1012.1.2JDBC驱动类型驱动类型l数据库中间件的纯数据库中间件的纯Java驱动程序驱动程序l使用与具体使用与具体数据库无关的网络应用通信协议数据库无关的网络应用通信协议,将,将java应用程应用程序中对数据库的访问发送给网
6、络上的序中对数据库的访问发送给网络上的中间件服务器中间件服务器。中间件。中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调服务器再把请求翻译为符合数据库规范的调用,再把这种调用传给数据库服务器用传给数据库服务器l网络协议驱动网络协议驱动-中间件服务器中间件服务器-数据库数据库Serverl优点:不需要在客户端加载数据库厂商提供的代码库;在执优点:不需要在客户端加载数据库厂商提供的代码库;在执行效率和可升级性方面是比较好的。行效率和可升级性方面是比较好的。l缺点:这种驱动在缺点:这种驱动在中间件层仍然需要有配置其它数据库驱动中间件层仍然需要有配置其它数据库驱动程序程序,并且由于多了一个中
7、间层传递数据,并且由于多了一个中间层传递数据计算机科学与技术系计算机科学与技术系1112.1.2JDBC驱动类型驱动类型l直接连接数据库的纯直接连接数据库的纯Java驱动程序驱动程序l这种驱动直接把这种驱动直接把jdbc调用转换为符合相关数据库系统规范的请求。调用转换为符合相关数据库系统规范的请求。由于这种驱动写的应用可以直接和数据库服务器通信,这种类型的由于这种驱动写的应用可以直接和数据库服务器通信,这种类型的驱动完全由驱动完全由java实现,因此实现了平台独立性实现,因此实现了平台独立性.l本地协议驱动本地协议驱动-数据库数据库Serverl优点优点1:所以它的执行效率是非常高的:所以它的
8、执行效率是非常高的优点优点2:平台独立性:平台独立性l缺点:虽然驱动程序可以动态的被下载,但是对于不同的数据库需缺点:虽然驱动程序可以动态的被下载,但是对于不同的数据库需要下载不同的驱动程序要下载不同的驱动程序计算机科学与技术系计算机科学与技术系1212.2JDBCAPIlJDBCAPI的基本功能的基本功能l建立一个与数据源的连接;建立一个与数据源的连接;l向数据源发出查询和更新语句;向数据源发出查询和更新语句;l处理得到的结果处理得到的结果计算机科学与技术系计算机科学与技术系1312.2JDBCAPIlJava中有关中有关JDBCAPI的类的类ljava.sql包包lDriverManage
9、r类:类:驱动程序管理类驱动程序管理类lDriver接口:接口:数据库驱动程序数据库驱动程序lConnection接口:到特定接口:到特定数据库的连接数据库的连接lStatement接口:用于执行接口:用于执行静态静态SQL语句语句并返回它所生成结果的对象。并返回它所生成结果的对象。lResultSet接口:接口:数据库结果集的一个数据表数据库结果集的一个数据表计算机科学与技术系计算机科学与技术系14l使用使用JDBC访问数据库,基本上需要以下几个方法和步骤访问数据库,基本上需要以下几个方法和步骤计算机科学与技术系计算机科学与技术系1.装入合适的驱动程序;装入合适的驱动程序;2.创建一个连接对
10、象;创建一个连接对象;3.生成一个生成一个SQL语句并执行;语句并执行;4.处理结果集;处理结果集;5.关闭连接。关闭连接。12.3基于基于JDBC的数据库应用开发方法的数据库应用开发方法151.装入驱动程序装入驱动程序计算机科学与技术系计算机科学与技术系lDriverManager类类12.3基于基于JDBC的数据库应用开发方法的数据库应用开发方法l驱动程序管理类驱动程序管理类l实现驱动程序的装载,并实现与实现驱动程序的装载,并实现与JDBC数据源的连接。数据源的连接。l是是JDBC的管理层,工作在用户和驱动程序之间。它跟踪的管理层,工作在用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库
11、和相应驱动程序之间建立连可用的驱动程序,并在数据库和相应驱动程序之间建立连接。接。lClass.forName(“数据库驱动程序类数据库驱动程序类”);Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Class.forName(“oracle.jdbc.driver.OracleDriver”);Class.forName(“com.mysql.jdbc.Driver”);16lClass类类l类类l一个普通类,可以提供程序中每个类的信息,如类名、类的一个普通类,可以提供程序中每个类的信息,如类名、类的父类、接口、类的成员变量、类的构造方法和方法等。
12、父类、接口、类的成员变量、类的构造方法和方法等。l主要方法:主要方法:12.3基于基于JDBC数据库应用开发方法数据库应用开发方法lpublicstaticClassforName(StringclassName)throwsClassNotFoundException;/该方法根据给定的字符串参数返回相应的该方法根据给定的字符串参数返回相应的Class对象。对象。计算机科学与技术系计算机科学与技术系17lClass类类l主要方法:主要方法:12.3基于基于JDBC数据库应用开发方法数据库应用开发方法lpublicbooleanisInterface();lpublicObjectnewIns
13、tance()throwsInstantiationException,IllegalAccessException;lpublicClassgetInterfaces();lpublicStringgetName();lpublicClassgetSuperclass();计算机科学与技术系计算机科学与技术系182.建立与数据源的连接。建立与数据源的连接。计算机科学与技术系计算机科学与技术系lJDBCURL12.3基于基于JDBC数据库应用开发方法数据库应用开发方法lJDBC数据源数据源url的标准格式:的标准格式:jdbc:ljdbc:总协议:总协议l子协议:驱动程序名或数据库连接机制(可
14、由一个或多个驱动子协议:驱动程序名或数据库连接机制(可由一个或多个驱动程序支持)的名称。程序支持)的名称。l子名称:指定具体数据库或数据源的连接信息(数据库服务器子名称:指定具体数据库或数据源的连接信息(数据库服务器的的IP地址,端口号,地址,端口号,ODBC数据源名称,连接用户名数据源名称,连接用户名/密码等)密码等)。例:例:jdbc:odbc:bookstorejdbc:dbnet:/wombat:356jdbc:microsoft:sqlserver:/127.0.0.1:1433;DatabaseName=stud192.建立与数据源的连接。建立与数据源的连接。计算机科学与技术系计算
15、机科学与技术系l建立连接建立连接12.3基于基于JDBC数据库应用开发方法数据库应用开发方法lConnectionDriverManager.getConnection(url)例:例:Stringurl=“jdbc:odbc:bookstore”;Connectioncon=DriverManager.getConnection(url);20lConnection类类计算机科学与技术系计算机科学与技术系l数据库的连接类。数据库的连接类。l定义了上下文的行为,在其中发布定义了上下文的行为,在其中发布SQL语句并接收结果语句并接收结果l提供的主要方法:提供的主要方法:12.3基于基于JDBC数
16、据库应用开发方法数据库应用开发方法1)createStatement();2)/创建创建Statement对象来将对象来将SQL语句发送到数据库。语句发送到数据库。2)prepareStatement(Stringquery);/创建创建PreparedStatement对象来将参数化的对象来将参数化的SQL语句发语句发送到数据库送到数据库 3)close();4)commit();/事务提交事务提交5)rollback();/事务回滚事务回滚213.创建创建SQL语句语句计算机科学与技术系计算机科学与技术系lStatement类,类,SQL语句类。语句类。执行执行SQL语句并获得处理结果。语
17、句并获得处理结果。lPrepareStatement类,预编译类。类,预编译类。用于执行预编译的用于执行预编译的SQL语句。语句。lCallableStatement类,存储过程类。类,存储过程类。用于执行对一个数据库存储过程的调用。用于执行对一个数据库存储过程的调用。12.3基于基于JDBC数据库应用开发方法数据库应用开发方法224.执行执行SQL语句语句计算机科学与技术系计算机科学与技术系l方法方法executeQuery()用于产生单个结果集的语句,例如用于产生单个结果集的语句,例如SELECT语句。语句。l方法方法executeUpdate()用于执行用于执行INSERT、UPDATE
18、或或DELETE语句以及语句以及SQLDDL语句,例如语句,例如CREATETABLE和和DROPTABLE。l方法方法execute()用于执行返回多个结果集、多个更新计数或二者组合的语用于执行返回多个结果集、多个更新计数或二者组合的语句。句。12.3基于基于JDBC数据库应用开发方法数据库应用开发方法23lStatement类类计算机科学与技术系计算机科学与技术系l主要方法:主要方法:12.3基于基于JDBC数据库应用开发方法数据库应用开发方法lResultSetexecuteQuery(Stringquery);lintexecuteUpdate(Stringquery);lboolea
19、nexecute(Stringquery);lsetMaxRows(intrownum);lgetMaxRows();lclose();lResultSetgetResultSet();lintgetUpdateCount();lbooleangetMoreResults();24lStatement类类计算机科学与技术系计算机科学与技术系l示例:示例:12.3基于基于JDBC数据库应用开发方法数据库应用开发方法Statementstmt=con.createStatement();Stringquery=“SELECT*FROMbooks”;ResultSetr=stmt.executeQu
20、ery(query);stmt.executeUpdate(UPDATEinformationSETbk_num=130WHEREname=袖珍英汉词典袖珍英汉词典);255.处理结果集处理结果集计算机科学与技术系计算机科学与技术系lResultSet类类12.3基于基于JDBC数据库应用开发方法数据库应用开发方法l结果集类结果集类l提供对结果集进行处理的方法。提供对结果集进行处理的方法。l主要方法:主要方法:lbooleannext();/first();last();previous();lgetXxx(Stringitemname/intnum);lResultSetMetaData g
21、etMetaData()/检索此检索此ResultSet对象的列的编号、类型和名字对象的列的编号、类型和名字26lResultSet类类计算机科学与技术系计算机科学与技术系l示例:示例:Stringquery=“SELECT*FROMbooks”;ResultSetr=stmt.executeQuery(query);/stmt.executeQuery(query);/r=stmt.getResultSet();while(r.next()Stringr1=r.getString(name);doubler4=r.getDouble(4);12.3基于基于JDBC数据库应用开发方法数据库应用
22、开发方法276.关闭连接关闭连接计算机科学与技术系计算机科学与技术系l关闭结果集关闭结果集l关闭关闭Statement对象对象l关闭连接关闭连接12.3基于基于JDBC数据库应用开发方法数据库应用开发方法28l利用利用JDBC/ODBC桥接驱动程序访问数据库的一般桥接驱动程序访问数据库的一般步骤:步骤:计算机科学与技术系计算机科学与技术系(1)通过通过ODBC建立访问的数据源,其建立访问的数据源,其URL地址为地址为url。(2)创建驱动程序管理类的对象。常用的方法如下:创建驱动程序管理类的对象。常用的方法如下:Class.forName(数据库驱动程序类数据库驱动程序类);(3)建立与数据源
23、的连接。方法如下:建立与数据源的连接。方法如下:Connectioncon=(4)DriverManager.getConnection(url);应用应用JDBC/ODBC桥访问数据库桥访问数据库创建数据库。创建数据库。设置系统的设置系统的ODBC数据源。数据源。29l利用利用JDBC/ODBC桥接驱动程序访问数据库的一般桥接驱动程序访问数据库的一般步骤:步骤:计算机科学与技术系计算机科学与技术系(4)利用利用Statement或它的子类对象,实现把或它的子类对象,实现把SQL语句发送语句发送到到DBMS。以查询数据库表为例。步骤如下:。以查询数据库表为例。步骤如下:(5)对返回的记录集进行
24、处理。对返回的记录集进行处理。(6)关闭结果集;关闭关闭结果集;关闭Statement对象;关闭连接。对象;关闭连接。应用应用JDBC/ODBC桥访问数据库桥访问数据库创建创建Statement对象;对象;执行执行SQL语句。语句。另外,还可获取和设置选项。另外,还可获取和设置选项。30应用应用JDBC/ODBC桥访问数据库桥访问数据库计算机科学与技术系计算机科学与技术系例:对一个数据库的数据表进行选择、插入、删除、更新记录的操作,对表进行创建和删除操作 31importjava.sql.*;classQuerypublicstaticvoidmain(Stringargs)try Class
25、t=Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptionce)System.out.println(SQLException:+ce.getMessage();tryConnectioncon=DriverManager.getConnection(jdbc:odbc:mydb);Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(select*frommytable);while(rs.next()System.out.p
26、rintln(姓名姓名+rs.getString(name)+t+性别性别+rs.getString(sex)+t+工资工资+rs.getFloat(salary);rs.close();stmt.close();con.close()catch(SQLExceptione)System.out.println(SQLException:+e.getMessage();32importjava.sql.*;classInsertpublicstaticvoidmain(Stringargs)tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch
27、(ClassNotFoundExceptionce)System.out.println(SQLException:+ce.getMessage();tryConnectioncon=DriverManager.getConnection(jdbc:odbc:mydb,li,1234);Statementstmt=con.createStatement();Stringsqlstr=insertintomytablevalues(2001,邢雪花邢雪花,女女,650);stmt.executeUpdate(sqlstr);stmt.executeUpdate(insertintomytable
28、values(2020,翟建设翟建设,男男,746);stmt.close();con.close();catch(SQLExceptione)System.out.println(SQLException:+e.getMessage();33importjava.sql.*;classDeletepublicstaticvoidmain(Stringargs)tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptionce)System.out.println(SQLException:+ce.getM
29、essage();tryConnectioncon=DriverManager.getConnection(jdbc:odbc:mydb,li,1234);Statementstmt=con.createStatement();Stringsql=deletefrommytablewherename=王五王五;stmt.executeUpdate(sql);stmt.close();con.close();catch(SQLExceptione)System.out.println(SQLException:+e.getMessage();34importjava.sql.*;classCre
30、atepublicstaticvoidmain(Stringargs)try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptionce)System.out.println(SQLException:+ce.getMessage();tryConnectioncon=DriverManager.getConnection(jdbc:odbc:mydb,li,1234);Statementstmt=con.createStatement();Stringsql=createtablestudent(s_n
31、umchar(4),s_namechar(6)null,scoreint);stmt.executeUpdate(sql);sql=insertintostudent(s_num,s_name,score)values(9901,张学军张学军,85);stmt.executeUpdate(sql);stmt.close();con.close();catch(SQLExceptione)System.out.println(SQLException:1+e.getMessage();35importjava.sql.*;classDroppublicstaticvoidmain(Stringa
32、rgs)tryClass.forName(sun.jdbc.odbc.JdbcOdbcDriver);catch(ClassNotFoundExceptionce)System.out.println(SQLException:+ce.getMessage();tryConnectioncon=DriverManager.getConnection(jdbc:odbc:mydb,li,1234);Statementstmt=con.createStatement();Stringsql=droptablestudent;stmt.executeUpdate(sql);stmt.close();
33、con.close();catch(SQLExceptione)System.out.println(SQLException:1+e.getMessage();36/将结果集放到表格中显示将结果集放到表格中显示VectorcolumnHeads=newVector();Vectorrows=newVector();tryStringquery=SELECT*FROMstud;statement=connection.createStatement();resultSet=statement.executeQuery(query);rsmd=resultSet.getMetaData();for(inti=1;i=rsmd.getColumnCount();+i)columnHeads.addElement(rsmd.getColumnName(i);while(resultSet.next()VectorcurrentRow=newVector();for(inti=1;i=rsmd.getColumnCount();+i)currentRow.addElement(resultSet.getString(i);rows.addElement(currentRow);JTable table=newJTable(rows,columnHeads);37