第11章 JDBC数据库编程.ppt
《第11章 JDBC数据库编程.ppt》由会员分享,可在线阅读,更多相关《第11章 JDBC数据库编程.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java实用教程第11章 JDBC数据库编程第11章 JDBC数据库编程11.1 JDBC概述11.2 JDBC中的常用接口11.3 连接数据库11.4 操作数据库10.5 网 络 聊 天11.5 应用JDBC事务11.2 JDBC中的常用接口JDBC提供了众多的接口和类,通过这些接口和类,可以实现与数据库的通信,本节将详细介绍一些常用的JDBC接口和类。11.2.1 Driver接口 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类,在加载某一驱动程序的Driver类时,它应该创建自己的实例并向java.sql.DriverManager类注册
2、该实例。通常情况下通过java.lang.Class类的静态方法forName(String className),加载欲连接数据库的Driver类,该方法的入口参数为欲加载Driver类的完整路径。成功加载后,会将Driver类的实例注册到DriverManager类中,如果加载失败,将抛出ClassNotFoundException异常,即未找到指定Driver类的异常。11.2.2 DriverManager类java.sql.DriverManager类负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立
3、连接;另外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等工作。成功加载Driver类并在DriverManager类中注册后,DriverManager类即可用来建立数据库连接。当调用DriverManager类的getConnection()方法请求建立数据库连接时,DriverManager类将试图定位一个适当的Driver类,并检查定位到的Driver类是否可以建立连接,如果可以则建立连接并返回,如果不可以则抛出SQLException异常。DriverManager类DriverManager类提供的常用静态方法如下表所示:方 法 名 称功 能 描
4、 述getConnection(String url,String user,String password)用来获得数据库连接,3个入口参数依次为要连接数据库的URL、用户名和密码,返回值的类型为java.sql.ConnectionsetLoginTimeout(int seconds)用来设置每次等待建立数据库连接的最长时间setLogWriter(java.io.PrintWriter out)用来设置日志的输出对象println(String message)用来输出指定消息到当前的JDBC日志流11.2.3 Connection接口 java.sql.Connection接口代表与
5、特定数据库的连接,在连接的上下文中可以执行SQL语句并返回结果,还可以通过getMetaData()方法获得由数据库提供的相关信息,例如数据表、存储过程和连接功能等信息。Connection接口提供的常用方法如下表所示。方 法 名 称功 能 描 述createStatement()创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例prepareStatement()创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行了预编译处理prepareCall()创建并返回一个CallableStatement实例
6、,通常在调用数据库存储过程时创建该实例setAutoCommit()设置当前Connection实例的自动提交模式。默认为true,即自动将更改同步到数据库中;如果设为false,需要通过执行commit()或rollback()方法手动将更改同步到数据库中getAutoCommit()查看当前的Connection实例是否处于自动提交模式,如果是则返回true,否则返回falsesetSavepoint()在当前事务中创建并返回一个Savepoint实例,前提条件是当前的Connection实例不能处于自动提交模式,否则将抛出异常releaseSavepoint()从当前事务中移除指定的Sa
7、vepoint实例setReadOnly()设置当前Connection实例的读取模式,默认为非只读模式。不能在事务当中执行该操作,否则将抛出异常。有一个boolean型的入口参数,设为true表示开启只读模式,设为false表示关闭只读模式isReadOnly()查看当前的Connection实例是否为只读模式,如果是则返回true,否则返回falseisClosed()查看当前的Connection实例是否被关闭,如果被关闭则返回true,否则返回falsecommit()将从上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connection实例当前拥有的所有数据库锁定rollba
8、ck()取消当前事务中的所有更改,并释放当前Connection实例拥有的所有数据库锁定。该方法只能在非自动提交模式下使用,如果在自动提交模式下执行该方法,将抛出异常。有一个参数为Savepoint实例的重载方法,用来取消Savepoint实例之后的所有更改,并释放对应的数据库锁定close()立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接11.2.4 Statement接口 java.sql.Statement接口用来执行静态的SQL语句,并返回执行结果。例如,对于INSERT、UPDATE和DELETE语句,调用executeUpdate(String sql
9、)方法;对于SELECT语句,则调用executeQuery(String sql)方法,并返回一个永远不能为null的ResultSet实例。Statement接口提供的常用方法如下表所示。方 法 名 称功 能 描 述executeQuery(String sql)执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例executeUpdate(String sql)执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,此数为同步更新记录的条数clearBatch()清除位于Batch中的所有SQL语句。如果驱动程序不支持批量处理将
10、抛出异常addBatch(String sql)将指定的SQL命令添加到Batch中。String型入口参数通常为静态的INSERT或UPDATE语句。如果驱动程序不支持批量处理将抛出异常executeBatch()执行Batch中的所有SQL语句,如果全部执行成功,则返回由更新计数组成的数组,数组元素的排序与SQL语句的添加顺序对应。数组元素有以下几种情况:大于或等于零的数:说明SQL语句执行成功,此数为影响数据库中行数的更新计数;:说明SQL语句执行成功,但未得到受影响的行数:说明SQL语句执行失败,仅当执行失败后继续执行后面的SQL语句时出现。如果驱动程序不支持批量、或者未能成功执行Ba
11、tch中的SQL语句之一,将抛出异常close()立即释放Statement实例占用的数据库和JDBC资源11.2.5 PreparedStatement接口 java.sql.PreparedStatement接口继承并扩展了Statement接口,用来执行动态的SQL语句,即包含参数的SQL语句。通过PreparedStatement实例执行的动态SQL语句将被预编译并保存到PreparedStatement实例中,从而可以反复并且高效地执行该SQL语句。需要注意的是,在通过setXxx()方法为SQL语句中的参数赋值时,建议利用与参数类型匹配的方法,也可以利用setObject()方法为
12、各种类型的参数赋值。PreparedStatement接口的使用方法如下:PreparedStatement接口提供的常用方法如下表所示。PreparedStatement ps=connection .prepareStatement(select*from table_name where id?and(name=?or name=?);ps.setInt(1,6);ps.setString(2,马先生);ps.setObject(3,李先生);ResultSet rs=ps.executeQuery();方 法 名 称功 能 描 述executeQuery()执行前面定义的动态SELEC
13、T语句,并返回一个永远不能为null的ResultSet实例executeUpdate()执行前面定义的动态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数SetInt(int i,int x)为指定参数设置int型值,对应参数的SQL类型为INTEGERsetLong(int i,long x)为指定参数设置long型值,对应参数的SQL类型为BIGINTsetFloat(int i,float x)为指定参数设置float型值,对应参数的SQL类型为FLOATsetDouble(int i,double x)为指定参数设置double型值,对应参数
14、的SQL类型为DOUBLEsetString(int i,String x)为指定参数设置String型值,对应参数的SQL类型为VARCHAR或LONGVARCHARsetBoolean(int i,boolean x)为指定参数设置boolean型值,对应参数的SQL类型为BITsetDate(int i,Date x)为指定参数设置java.sql.Date型值,对应参数的SQL类型为DATEsetObject(int i,Object x)用来设置各种类型的参数,JDBC规范定义了从Object类型到SQL类型的标准映射关系,在向数据库发送时将被转换为相应的SQL类型setNull(i
15、nt i,int sqlType)将指定参数设置为SQL中的NULL。该方法的第二个参数用来设置参数的SQL类型,具体值从java.sql.Types类中定义的静态常量中选择clearParameters()清除当前所有参数的值11.2.6 CallableStatement接口 java.sql.CallableStatement接口继承并扩展了PreparedStatement接口,用来执行SQL的存储过程。JDBC API定义了一套存储过程SQL转义语法,该语法允许对所有RDBMS通过标准方式调用存储过程。该语法定义了两种形式,分别是包含结果参数和不包含结果参数的形式,如果使用结果参数,
16、则必须将其注册为OUT型参数,参数是根据定义位置按顺序引用的,第一个参数的索引为1。为参数赋值的方法使用从PreparedStatement类中继承来的setXXX()方法。在执行存储过程之前,必须注册所有OUT参数的类型,它们的值是在执行后通过getXxx()方法获得的。CallableStatement接口可以返回一个或多个ResultSet对象。处理多个ResultSet对象的方法是从Statement中继承来的。11.2.7 ResultSet接口 java.sql.ResultSet接口类似于一个数据表,通过该接口的实例可以获得检索结果集,以及对应数据表的相关信息,例如列名和类型等,
17、ResultSet实例通过执行查询数据库的语句生成。ResultSet实例具有指向当前数据行的指针,最初,指针指向第一行记录,通过next()方法可以将指针移动到下一行,如果存在下一行该方法则返回true,否则返回false,所以可以通过while循环来迭代ResultSet结果集。默认情况下ResultSet实例不可以更新,只能移动指针,所以只能迭代一次,并且只能按从前向后的顺序。如果需要,可以生成可滚动和可更新的ResultSet实例。ResultSet接口 ResultSet接口提供了从当前行检索不同类型列值的getXxx()方法,均有两个重载方法,分别根据列的索引编号和列的名称检索列值
18、,其中以列的索引编号较为高效,编号从1开始。对于不同的getXxx()方法,JDBC驱动程序尝试将基础数据转换为与getXxx()方法相应的Java类型并返回。在JDBC 2.0 API之后,为该接口添加了一组更新方法updateXxx(),均有两个重载方法,分别根据列的索引编号和列的名称指定列。可以用来更新当前行的指定列,也可以用来初始化要插入行的指定列,但是该方法并未将操作同步到数据库,需要执行updateRow()或insertRow()方法完成同步操作。ResultSet接口提供的常用方法如下表所示方 法 名 称功 能 描 述first()移动指针到第一行。如果结果集为空则返回fals
19、e,否则返回true。如果结果集类型为TYPE_FORWARD_ONLY 将抛出异常last()移动指针到最后一行。如果结果集为空则返回false,否则返回true。如果结果集类型为TYPE_FORWARD_ONLY 将抛出异常previous()移动指针到上一行。如果存在上一行则返回true,否则返回false。如果结果集类型为TYPE_FORWARD_ONLY 将抛出异常next()移动指针到下一行。指针最初位于第一行之前,第一次调用该方法将移动到第一行。如果存在下一行则返回true,否则返回falsebeforeFirst()移动指针到ResultSet实例的开头,即第一行之前。如果结果
20、集类型为TYPE_FORWARD_ONLY 将抛出异常afterLast()移动指针到ResultSet实例的末尾,即最后一行之后。如果结果集类型为TYPE_FORWARD_ONLY 将抛出异常absolute()移动指针到指定行。有一个int型参数,正数表示从前向后编号,负数表示从后向前编号,编号均从1开始。如果存在指定行则返回true,否则返回false。如果结果集类型为TYPE_FORWARD_ONLY 将抛出异常relative()移动指针到相对于当前行的指定行。有一个int型入口参数,正数表示向后移动,负数表示向前移动,视当前行为0。如果存在指定行则返回true,否则返回false。
21、如果结果集类型为TYPE_FORWARD_ONLY 将抛出异常getRow()查看当前行的索引编号。索引编号从1开始,如果位于有效记录行上则返回一个int型索引编号,否则返回0findColumn()查看指定列名的索引编号。该方法有一个String型参数,为要查看列的名称,如果包含指定列,则返回int型索引编号,否则将抛出异常isBeforeFirst()查看指针是否位于ResultSet实例的开头,即第一行之前。如果是则返回true,否则返回falseisAfterLast()查看指针是否位于ResultSet实例的末尾,即最后一行之后。如果是则返回true,否则返回falseisFirst
22、()查看指针是否位于ResultSet实例的第一行。如果是则返回true,否则返回falseisLast()查看指针是否位于ResultSet实例的最后一行。如果是则返回true,否则返回falseclose()立即释放ResultSet实例占用的数据库和JDBC资源,当关闭所属的Statement实例时也将执行此操作getInt()以int型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0getLong()以long型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0getFloat()以float型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0方 法 名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第11章 JDBC数据库编程 11 JDBC 数据库 编程
限制150内