JDBC
背景:1996年,Sun公司推出了Java数据库连接(Java Database Connectivity JDBC)工具包的第一个版本.该工具包使得程序员可以使用结构化语言SQL连接到一个数据库,对数据库进行操作 JDBC是Java程序连接和存取数据库的应用程序借口API ,是Java核心API的一部分.
13.1 JDBC的结构
13.1.1 JDBC数据库应用模型
JDBC是由两层组成,上面一层是JDBC API,下面一层是JDBC驱动程序API
1:Java应用程序
Java程序包括应用程序.Applet和Servlet,这些类型的程序都可以利用JDBC方法完成对数据库的访问和操作.其完成的主要任务有:请求与数据库建立连接,向数据库发送SQl请求,为结果集定义存储应用和数据类型,查询结果,处理错误,提交及关闭等操作.
2 JDBC驱动程序管理器
JDBC驱动程序管理器能够动态地管理和维护数据库查询所需要的所有厂商或第三方所提供的驱动程序对象,实现Java任务与特定的驱动程序的连接,从而体现JDBC与平台无关的这一特点.他完成的主要任务有:为特定的数据库选择驱动程序,处理JDBC初始化调用,为每一个驱动程序提供JDBC功能的入口,为JDBC调用执行参数等
3:驱动程序:
一般由数据库厂商或第三方提供,JDBC是独立于DBMS 的.
4:数据库
这里的数据库是指Java程序需要的数据库以及数据库管理系统
13.2 通过JDBC访问数据库
13.2.1 基本流程
1:建立ODBC数据源
2:装入JDBC驱动程序
为了要连接到数据库,必须要有相应数据库的JDBC驱动程序,并将驱动程序的.jar文件加入到Classpath的设置中.此后再在程序中通过DriverManager类加载JDBC驱动类
DriverManager类管理各种数据库驱动程序,建立新的数据库连接,以便Java应用程序能够使用正确的JDBC驱动
3:建立连接
与数据库建立连接的标准方法时调用方法
DriverManger.getConnection(String url,String user,String password)
4:执行SQL语句
连接一旦建立,就可用来向它所涉及的数据库传送SQL语句.JDBC 提供了三个类,用于向数据库发送SQL语句.Connection接口中的三个方法可用于创建这些类的实例.
1:Statement 由方法createStatement所创建.Statement对象用于发送简单的SQL语句.
2:PreparedStatement,由方法prepareStatement所创建.PreparedStatement对象用于发送带有一个或多个输入参数的SQL语句.PrepareStatemt拥有一组方法,用于设置输入参数的值.执行语句时,这些参数将被送到数据库中. PreparedStatement 对象扩展了Statement,因此他们都包含了Statement的方法. PreparedStatement的效率更高,因为它已经被预编译过并放在那里以供将来使用
5:检索结果
SQL语句发送以后,返回的结果通常存放在一个ResultSet类的对象中,ResultSet对象可以看做一个表,这个表包含由SQL返回的列名和相应的值,ResultSet类的对象中维持了一个指向当前行的指针,通过一系列的get***方法,可以检索当前行的各个列,并显示出来.
6:关闭连接
在对象使用完毕后,应当使用close()方法解除与数据库的连接,并关闭数据库
13.2.2常用的JDBC API
Java.sql包中的主要类和接口
类或接口名称 |
说明 |
Java.sql.CallableStatement |
用于执行SQL存储过程 |
Java.sql. Connection |
表示与一个特定数据库的会话.在一个Connection的上下文中,执行SQL语句并返回结果 |
Java.sql.DataTruncation |
截断一个数据的值产生的异常 |
Java.sql.Date |
对日期的处理类 |
Java.sql.Driver |
数据库驱动程序类 |
Java.sql.DriverManager |
提供管理JDBC驱动器设置的基本服务 |
Java.sql.DriverPropertyInfo |
程序员与驱动器交互的类,以发现和提供链接特性 |
Java.sql.PreparedStement |
用于有效次地多次执行编译的SQL语句 |
Java.sql.ResultSet |
提供了通过执行一条语句访问所生成的数据表的功能 |
Java.sql.SQLException |
提供了关于数据库访问错误的信息 |
Java.sql.Statement |
用于执行一条静态的SQL语句并获取它产生的结果 |
Java.sql.Time |
处理时间 |
.
1:DriverManager类
该类是JDBC的管理类,负责管理JDBC驱动程序,跟踪可用的驱动程序并在数据库中和相应的驱动程序之间建立连接.如果要使用JDBC驱动程序,必须加载JDBC驱动程序并向DriverManager注册之后才能使用.加载和注册驱动程序可以使用Class.forName()这个方法来完成.该类的主要方法有:
public static synchronized Connection getConnection(String url) throws SQLException 这个方法的作用是使用指定的数据库URL创建一个连接,使DriverManager从注册的JDBC驱动中选择一个适当的驱动程序
public static synchronized getConnection(String url, Properties infor) throws SQLException方法,相比上一个多了一个infor参数用于存储用户名,用户密码等信息.
public static synchronized getConnection(String url, String user, String password) throws SQLException 它使用指定的数据库URL,用户名,密码创建一个连接
public static synchronized getDriver(String url,) throws SQLException 它定位在给定的URL下的驱动程序
public static void deregisterDriver(Driver driver) throws SQLException 这个方法是从DriverManaber类表中删除指定的驱动的程序
public static int getLoginTimeout() 它用来获取链接数据库时驱动程序可以等待的最大的时间,以秒为单位
public static PrintStream getLogStream() 它用来获取DriverManager和所有驱动程序使用的日志PrintStream
2:Connection类
该类负责建立与指定数据库的连接 其主要方法有
Public Statement createStatement() throws SQLException方法,用来创建Statement类的对象
Public StatementcreateStatement(int resultSetType, int resultSetConcurrency) throws SQLException,用来指定的参数创建Statement类的对象
Public PreparedStatement prepareStatement(String sql) throws SQLException ,用来创建PreparedStatement对象.
Public CallableStatement prepareCall(String sql) throws SQLException 用来创建CallableStatement类对象,执行存储过程.
Public void commit throws SQLException 用来提交对数据库执行添加,删除或修改记录的操作
Public Boolean getAutoCommit(Boolean autoCommit) throws SQLException 用来设置Connection类对象的Auto_Commit自动提交的状态,若设置为true,则它的每个SQL语句将作为袷单独的事务被执行和提交
Public void rollback() throws SQLException 用来取消对数据库执行过的添加,删除,修改记录等操作,将数据库恢复到执行这些操作前的状态
Public void close() throws SQLException 用于断开Connection对象与数据库的连接
Public Boolean isClosed() throws SQLException 用来测试是否已经关闭连接了
3:Statement类
该类的主要功能是将SQL命令传送给数据库,并将SQL命令的执行结果返回.Statement类提供的常用方法如下
Public ResultSet executeQuery(String sql) throws SQLException 方法用来执行自动的SQL查询语句,返回查询结果
Public int executeUPdate(String sql) throws SQLException 用来执行SQL的插入 更新 删除 语句,返回值是插入 修改 或删除的记录数 或者是0
Public Boolean execute(String sql) throws SQLException 如果执行结果为一个结果集对象,则返回true,否则返回false
Public ResultSet getResultSet() throws SQLException 用于获取ResultSet对象当前的结果集.对于每一个结果只鞥调用一此
Public int getUpdateCount() throws SQLException 用于获取当前结果的更新的记录数,如果结果集是一个ResultSet对象或没有更多的结果,则返回-1.对于每一个结果只调用一次
Public void close() throws SQLException 用户释放Statement对象的数据库和JDBC资源.
4:PreparedStatement 类
该类对象可以代表一个与编译的SQL语句,它是Statement 接口中的子接口.效率高
5:ResultSet类
表示从数据库中返回的结果集,当使用Statement 和PreparedStatement 类提供的executeQuery()方法来下达Selet命令以查询数据库时,方法将会把数据库响应查询的数据放在ResultSet类对象中供用户使用 常用的方法如下
Public Boolean avsolute(int row) throws SQLException 方法,用来移动指针到指定记录
Public boolean first() throws SQLException 方法,用来移动记录指针到第一个记录
Public boolean last() throws SQLException 方法,用来移动记录指针到最后一个记录
Public void afterLast() throws SQLException 方法,用来移动记录指针到最后一个记录之后
Public boolean previous() throws SQLException 方法,用来移动记录指针到上一个记录
Public boolean next() throws SQLException 方法,用来移动记录指针到下一个记录
Public void insertRow() throws SQLException,用来插入一个记录到数据表中
Public void updateRow() throws SQLException,用来修改数据表中的一个记录
Public void deleteRow() throws SQLException,用来删除记录指针指向记录
12.2.3 事务
事务是由一个或者多个这样的语句组成:这些语句已被执行,完成并被提交或还原.当调用方法commit或rollback时,当前事务结束,另一个事务开始