《Java数据库连接》PPT课件.ppt
Modal 10:Java数据库编程唐好选Email:主要内容主要内容ODBC介绍JDBC介绍JDBC例程JDBC结构(包括JDBC API和JDBC驱动)Java JDBC应用框架Java JDBC基本类介绍Java JDBC异常事务处理ODBCODBC介绍介绍ODBC(Open DataBase Connectivity)ODBC是用C语言实现的一种标准应用程序数据库接口,包括以下几个方面的内容应用程序接口:统一的SQL编程接口驱动器管理器:为应用程序装载数据库驱动器数据库驱动器:实现ODBC的函数调用,提供对特定数据源的SQL请求数据源:由DBMS、操作系统和相关的网络平台组成JDBCJDBC介绍介绍JDBC(Java DataBase Connectivity)JDBC 是一种用于执行SQL语句的Java API,可以按统一的方式访问数据库JDBC程序包:java.sqlJDBC提供实现:访问数据库与平台无关 对数据库使用者而言是透明的对数据库本身而言也是透明的几乎每个数据库供应商都具有JDBC驱动JDBCJDBC介绍介绍JDBC可以使java应用(APP和Applet)同大量关系数据库系统之间建立起独立于数据库的连接(例如Oracle/Sybase/SQL Server等)JDBC主要实现以下功能连接到数据库向数据库发送SQL语句处理数据库返回的结果执行更新/插入和删除操作执行存储过程import java.sql.*try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection connection=DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);Step1:Step1:连接到数据库连接到数据库 Statement statement=connection.createStatement();String sql=“SELECT*FROM student”;ResultSet resultSet=statement.executeQuery(sql);Step2:Step2:执行执行SQLSQL语句,查询数据库语句,查询数据库JDBCJDBC例程例程while(resultSet.next()name=resultSet.getString(1);phone=resultSet.getString(2);System.out.println(name+“,”+phone);Step3:Step3:产生查询结果产生查询结果 resultSet.close();statement.close();connection.close();catch(Exception e)Step4:Step4:关闭连接关闭连接JDBCJDBC例程例程步骤1:得到正确的 driver 并创建一个连接Driver 是动态装入的The Connection URL 是与数据库有关的,并指向服务器Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection connection=DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);JDBCJDBC例程例程步骤 2:建立一个 statement;向字符串中写入 SQL 命令,执行它SQL 命令会传送到数据库会返回一个结果集对象(ResultSetObject),该对象包含查询后的结果Statement statement=connection.createStatement();String sql=“SELECT*FROM student”;ResultSet resultSet=statement.executeQuery(sql);JDBCJDBC例程例程步骤3:分析结果get()方法得到每种数据类型的数据(getString(col),getDate(col),)更改数据的方法(updateString(col,val),)scrollable 结果集可以定位具体行(first(),last(),previous(),next(),absolute(int),)while(resultSet.next()name=resultSet.getString(1);phone=resultSet.getString(2);System.out.println(name+“,”+phone);JDBCJDBC例程例程步骤 4:操作完成后要关闭关闭顺序很重要:1.ResultSet2.Statement3.Connection resultSet.close();statement.close();connection.close();JDBCJDBC例程例程JDBCJDBC结构结构JDBC结构由两个层次组成JDBC API支持Java应用到JDBC驱动管理器的通信JDBC驱动API支持JDBC驱动管理器到ODBC驱动的通信JDBC API同时支持数据库访问的两层和三层模型JDBCJDBC结构结构在两层数据库访问模型中,应用程序直接同数据库进行通信,两层模型需要JDBC的驱动,由JDBC驱动把SQL语句直接传递给数据库,并将结果发送回应用程序JDBCJDBC结构结构在三层的数据库访问模型中,JDBC驱动把用户命令发送给一个中间层应用服务,然后由它把命令发送给数据库,数据库处理这些命令,把结果发送回中间层,由中间层把结果发送回应用程序JDBCJDBC结构结构对于应用程序开发人员,JDBC API允许如下操作连接到数据源发送SQL语句通过浏览/检查和编辑数据的方法来处理结果访问数据库的元数据和查询结果JDBCJDBC驱动驱动所有的Java程序与数据库创建连接过程的第一步是在JVM中注册JDBC驱动静态注册DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver();动态注册Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);一旦JDBC驱动程序用DriverManager注册了,就可用于建立到数据库的连接JDBCJDBC驱动驱动JDBC数据库驱动具有四种类型JDBC-ODBC桥:JDBC先连接到ODBC,ODBC再连接到数据库,把JDBC的方法转换为ODBC的功能部分java驱动:直接连接到供应商客户库中 中间件驱动:由JDBC连接到中间件,中间件再连接到数据库上纯java驱动:直接把JDBC的驱动转化为DBMS使用的网络协议,允许从客户机上直接调用DBMS服务器,是一种“瘦”驱动类型3和类型4都可以用在有关因特网的应用程序中ClientNative program(must be installed)Java program(could be downloaded)RDBMS类型类型 1:JDBC-ODBC 1:JDBC-ODBC驱动驱动运行在 Windows上需要在客户端安装ODBC driver类型类型 1:JDBC-ODBC 1:JDBC-ODBC驱动驱动import java.sql.*try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);Connection connection=DriverManager.getConnection(“jdbc:odbc:Demo”,”a”,”a”);ClientNative program(must be installed)Java program(could be downloaded)RDBMS类型类型 2:2:部分部分javajava驱动(本地驱动(本地APIAPI驱动)驱动)客户端安装driverdriver将 JDBC请求转成数据库本地 API请求每台客户机上加载数据库库文件不能用在因特网上import java.sql.*try Class.forName(“com.ibm.db2.jdbc.app.DB2Driver”);Connection connection=DriverManager.getConnection(“jdbc:db2:Demo”,”a”,”a”);类型类型 2:2:部分部分javajava驱动(本地驱动(本地APIAPI驱动)驱动)类型类型 3:3:中间件驱动(网络协议驱动)中间件驱动(网络协议驱动)Client bClient aClient cRDBMScNative program(must be installed)Java program(could be downloaded)Network ProtocolRDBMSbRDBMSaDatabase ProtocolaDatabase ProtocolbDatabase Protocolc网络服务器作用负责管理职责缓冲caching池pooling ClientServerConnection in useFree ConnectiongetConnection()Connection PoolRDBMS类型类型 3:3:中间件驱动(网络协议驱动)中间件驱动(网络协议驱动)类型类型 4:4:纯纯javajava驱动(本地协议驱动)驱动(本地协议驱动)其实现不需要客户端的任何配置!ClientNative program(must be installed)Java program(could be downloaded)RDBMSimport java.sql.*try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);conn=DriverManager.getConnection(jdbc:microsoft:sqlserver:/TANGHX:1433;DatabaseName=teach,sa,);类型类型 4:4:纯纯javajava驱动(本地协议驱动)驱动(本地协议驱动)MySQLClass.forName(“org.gjt.mm.mysql.Driver”)DriverManage.getConnection(“jdbc.mysql:/Hostname:3306/DatabaseName”,sUsr,spwd)OracleClass.forName(“oracle.jdbc.driver.OracleDriver”);DriverManager.getConnection(“jdbc:oracle:thin:1521:DatabaseName”,sUsr,sPwd)JDBC URL JDBC URL SybaseClass.forName(“com.sybase.jdbc2.jdbc.SybDriver”)DriverManage.getConnection(“jdbc.sybase:Tds:HostName:2638”,sUsr,spwd)SqlServerClass.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);DriverManager.getConnection(“jdbc:microsoft:sqlserver:/HostName:1433;DatabaseName=demo”,sUsr,sPwd)DB2Class.forName(“.DB2Driver”);DriverManager.getConnection(“jdbc:db2:/HostName/DatabaseName”,sUsr,sPwd)JDBC URL JDBC URL DriverManage类可维护驱动实现的列表,最终向应用程序提供一个匹配了JDBC URL的驱动实现Driver类是JDBC驱动的接口,任何特定的数据库驱动都必须实现该接口Connection接口用来把一系列SQL语句发送给数据库,并管理其提交或中断,具体包含如下步骤加载数据库驱动定义URL建立连接Java.sqlJava.sql核心类介绍核心类介绍JDBC支持三种类型的语句Statement:用来立即执行SQL语句PreparedStatement:用来执行编译后的SQL语句CollableStatement:用来执行存储过程Statement用来执行静态SQL语句,并获得处理结果可使用Connection对象中的createStatement()方法创建Statement对象对于SELECT语句,使用的方法是executeQuery()对于诸如UPDATE/DELETE/DDL等语句,使用的方法是executeUpdate()Java.sqlJava.sql核心类介绍核心类介绍PreparedStatement:用来执行编译后的SQL语句Java.sqlJava.sql核心类介绍核心类介绍PreparedStatement pstmt=con.prepareStatement(UPDATE EMPLOYEES SET SALARY=?WHERE ID=?);pstmt.setBigDecimal(1,153833.00);pstmt.setInt(2,110592);pstmt.executeUpdate();CallableStatement:用来执行存储过程Connection.prepareCall(call proc_test(?,?);ResultSet接口封装了代表数据库查询返回数据的对象Statement接口的executeQuery()方法返回了ResultSet对象获得ResultSet对象的句柄之后,指针最初定位在第1行之前,使用ResultSet对象的next()方法可以循环遍历数据库返回全部数据行Java.sqlJava.sql核心类介绍核心类介绍DatabaseMetaData接口提供了描述数据库全局信息的所有变量和方法Java.sqlJava.sql核心类介绍核心类介绍DatabaseMetaData dm=conn.getMetaData();System.out.println(dm.getDatabaseProductName();System.out.println(dm.getDatabaseProductVersion();System.out.println(dm.getDriverName();System.out.println(dm.getDriverVersion();System.out.println(dm.getMaxRowSize();System.out.println(dm.getURL();System.out.println(dm.getUserName();JDBCJDBC异常类型异常类型JDBC提供的异常类型包括:SQLException/SQLWarning/DataTruncationJava.sql程序包中大多数方法都用SQLException指示异常,要求用try/catch程序块处理异常 try catch(SQLException sqle)while(sqle!=null)System.err.print(“SQLException:“);System.println(sqle.toString();sqle=sqle.getNextException();事务处理事务处理不进行事务处理例:1.Client A reads the record(a,b)2.Client B reads the record(a,b)3.Client A changes a for x and writes(x,b)4.Client B changes b for z and writes(a,z)客户B覆盖了 A的变化进行事务处理,记录可得到保护:1.Transaction 1 begins;Client A reads the record(a,b)2.Transaction 2 begins;Client B reads the record(a,b)3.Client A changes a for x and writes(x,b);Transaction 1 ends4.Client B changes b for z and writes(a,z);由于记录已被更新,事务2更新失败JDBCJDBC事务支持事务支持Connection对象省设置为自动提交方式,意味着每次执行一条语句,都会向数据库提交Connection对象可直接控制事务并进行提交或回滚,通常由以下几个方法完成Void setAutoCommit(boolean autoCommit)Void commit()Void rollback()在事务的开始位置,通常调用con.setAutoCommit(false)方法,如果成组的更新操作都成功执行,便调用mit()方法,如果发生了异常,则调用con.rollback()方法撤消全部修改我们的例子我们的例子数据的导入需要将数据写入数据库执行Insert数据导出需要从数据库读取数据执行查询数据的添加和修改需要写入数据库执行insert 或 update数据的删除需要删除数据库记录执行Delete