1 JDBC概述
JDBC(Java DataBase Connectivity)称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。换言之,有了JDBC,就不必为访问Mysql数据库专门写一个程序,为访问Oracle又专门写一个程序等等,只需用 JDBC写一个程序就够了,它可以向相应数据库发送sql语句。
JDBC提供了一组类和接口用于对数据库的访问,用JDBC访问数据库基本要经历一下几个步骤
1 于数据库建立连接
2 执行sql语句以便对数据库进行各种操作,返回操作数据库的结果
3 关闭数据库连接
JDBC API既支持数据库访问的两层模型,也支持三层模型
在两层模型中,Java API或应用程序直接与数据库进行对话,这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行通信,用户的SQL语句被送往数据库,而其结果将被送回给用户。
在三层模型中,命令首先是发送到服务的中间价,然后由它将sql语句发送给数据库,数据库对sql语句进行处理并将结果送回到中间件,中间件再将结果发送给用户。
Java操作数据库都是通过JDBC来实现的,而JDBC的一个很大的优点在于实现了接口的统一,也就是说与数据库的无关性,但在具体运用中,往往由于数据库的不同需要去修改数据库的链接代码。
针对不同的数据库,具体的JDBC驱动包是不一样的,所以在使用不听的数据库时,需要对好入入座。
2 JDBC的常用接口和类
JDBC是一个规范,遵循JDBC几口规范,各个数据库厂家各自实现自己的驱动程序,应用在获取数据库连接时,需要以URL 的方式制定是那种类型的驱动,在或得特定的链接之后,可按照固定的接口操作不同类型的数据库
在JDBC中提供了四个类进行数据库管理的操作
(1) DriverManager类用来装载驱动程序,它所有的成员都是静态成员,所以在程序中无须对它进行实例化,直接通过类名就可以访问.DriverManager是JDBC 的管理层,作用于用户和驱动程序间加载驱动程序,DriverManager类跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接
当DriverManager调用getConnection()方法来建立于数据库的链接时,DriverManager类首先从它已加载的驱动程序池中找到一个可以接受该数据库URL的驱动程序,然后请求该驱动程序使用相关的数据库URL去连接数据库。
通过调用方法Class.forName(),将显式的加载驱动程序类。forName的参数应该是 “公司名.数据库名.驱动程序名”
当调用DriverManager.getConnection()发出连接请求时,DriverManager将检查每一个驱动程序,看它是否可以建立连接
Connection getConnection(String url.String usr,String password)
url表示指向数据库的URL它的大致格式如下,jdbc:(subprotocol):(subname)
其中subprotrol表示子协议,制定连接何种数据库或使用什么方式连接数据库,subname表示确定一个连接,可以使一个数据源名,也可以指向一个网上的数据库
(2)Connection类
Connection 类是指向一个数据库的连接,作用是管理指向数据库的连接,连接过程中包含所执行的sql语句和在该链接上返回的结果,一个应用程序可以与单个数据库有一个或多个连接,也可以与许多数据库有链接。在完成同数据库连接的所有任务之后关闭该链接
常用的方法有
(1)close().用于关闭和数据库的链接,当一个Connection使用后,并没有被关闭,系统会将此连接保留一段时间,知道超时。使用方法如下
conn.close()
(2)isClosed()判断一个连接是否已经关闭,返回一个布尔值,关闭时返回true。反之
(3)commit()。提交对数据库的更改,使其生效,只有在禁止自动提交时,(setAutoCommit(false))需要使用这个方法,否则对数据库的更改会自动提交到数据库。
(4)getAutoCommit().检测该链接是否处于自动提交状态,自动状态时为true反之false
(5)isReadOnly()检测该链接是否是只读状态,返回一个布尔值。
(6)setAutoCommit()设置操作是否自动提交到数据库,[color=red]默认情况是true[/color],即新建的链接处于自动提交模式。
(7)setReadOnly可以把一个连接设置为只读
(8)createStatement .用于创建一个Statement,Statement用于执行SQL语句,使用方法
Statement stm=conn.createStatement();
createStatement()还可以带一些参数
如 Statement stm=conn.createStatement(type,concurrency);
其中type有以下几种情况
ResultSet.TYPE_FORWARD_ONLY,表示结果集记录指针只能向前移动
ResultSet.TYPE_SCROLL_INSENSITIVE表示结果集可以向前后移动,但数据库内容发生变化时结果集不变。
ResultSet.TYPE_SCROLL_SENTIVITY表示结果集可以前后移动,但数据库内容发生变化时结果集同步改变
参数concurrency决定是否可以用结果集更新
ResultSet.CONCUR_READ_ONLY,表示结果集只读,不能跟新数据表中的数据
ResultSet.CONCUR_UPDATE,表示是否可以通过结果集跟新数据库数据
(9)prepareCall(String sql)创建一个CallableStatement用于执行存储过程、
(10)prepareStatement()一条带有或不带IN
参数的sql语句可以被预编译并存放在PrepareStatement对象中,该对象用于有效的多次执行该语句。
(11)rollback。回滚当前的操作,并释放当前连接保存的任何数据锁,只有在禁止自动提交后才能使用该方法
3.Statement类
Java.sql.Statement用于在基层连接上运行sql语句,并且访问结果。Connection接口提供了生成Statement的方法,一般情况下通过connection.createStatement方法就可以得到Statement对象的实例
在使用中有三种Statment对象,分别是Statement,PrepareStatement和CallableStatement.
Statement对象用于执行不带参数的基本的sql语句,他的典型使用
Connection conn=DriverManager.getConnection(……);
Statement stm=conn.createStatement();
ResultSet rs=stm.executeQuery("sql");
……
PrepareStatement对象是从Statement继承过来的。用于执行带或不带IN参数的预编译的SQL语句,它的典型使用是
Connection conn=DriverManager.getConnection("url");
PrepareStatement pstm=conn.prepareStatement(" insert into person values(?,?,?,?)");
pstm.setInt(1,1);
pstm.setString(2,"twm");
pstm.setString(3,"boy");
pstm.setInt(4,25);
pstm.executeUpdate();
…………
CallableStatement对象是PrepareStatement继承过来的用于执行对数据库存储过程的调用
Statement对像还提供许多方法,其中常用的方法有
(1)execute().运行sql语句,返回一个是否有结果集的布尔值,使用方法如下
stm.execute(String sql);
其中参数是一条sql语句
(2)executeQuery()执行一条返回ResultSet的sql语句,返回值室友查询产生的数据集合,使用方法如下
stm.executeQuery(String sql);
其中sql是静态的select语句
(3)executeUpdate(),执行INSERT.UPDATE.DELETE或一条没有返回数据集的sql语句,
该方法返回影星语句的条数,
executeUpdate(String sql);
(4)cancel()用于一个线程取消令一个线程正在执行的语句使用方法如下
stm.cancel();
(5)getResultSet()用于得到当前ResultSet的结果
stm.getResultSet();
4 ResultSet类
在Statement执行sql语句时,有时候会返回ResultSet结果集,ResultSet往往包含的是查询的结果集,并可以通过它的不同的方法提取出查询结果
此接口抽象了运行select语句的结果,提供了逐行访问结果的方法,通过他可以访问结果的不同字段,它通过next()方法将当前的指针向前移动一行,最初指针位于第一行之前,因此第一次条用next()方法,把指针置于第一行上,使他成为当前行,随着每次调用next()依次获得ResultSet行
JDBC(Java DataBase Connectivity)称为Java数据库连接,它是一种用于数据库访问的应用程序API,由一组用Java语言编写的类和接口组成,有了JDBC就可以用同一的语法对多种关系数据库进行访问,而不用担心其数据库操作语言的差异。换言之,有了JDBC,就不必为访问Mysql数据库专门写一个程序,为访问Oracle又专门写一个程序等等,只需用 JDBC写一个程序就够了,它可以向相应数据库发送sql语句。
JDBC提供了一组类和接口用于对数据库的访问,用JDBC访问数据库基本要经历一下几个步骤
1 于数据库建立连接
2 执行sql语句以便对数据库进行各种操作,返回操作数据库的结果
3 关闭数据库连接
JDBC API既支持数据库访问的两层模型,也支持三层模型
在两层模型中,Java API或应用程序直接与数据库进行对话,这将需要一个JDBC驱动程序来与所访问的特定数据库管理系统进行通信,用户的SQL语句被送往数据库,而其结果将被送回给用户。
在三层模型中,命令首先是发送到服务的中间价,然后由它将sql语句发送给数据库,数据库对sql语句进行处理并将结果送回到中间件,中间件再将结果发送给用户。
Java操作数据库都是通过JDBC来实现的,而JDBC的一个很大的优点在于实现了接口的统一,也就是说与数据库的无关性,但在具体运用中,往往由于数据库的不同需要去修改数据库的链接代码。
针对不同的数据库,具体的JDBC驱动包是不一样的,所以在使用不听的数据库时,需要对好入入座。
2 JDBC的常用接口和类
JDBC是一个规范,遵循JDBC几口规范,各个数据库厂家各自实现自己的驱动程序,应用在获取数据库连接时,需要以URL 的方式制定是那种类型的驱动,在或得特定的链接之后,可按照固定的接口操作不同类型的数据库
在JDBC中提供了四个类进行数据库管理的操作
(1) DriverManager类用来装载驱动程序,它所有的成员都是静态成员,所以在程序中无须对它进行实例化,直接通过类名就可以访问.DriverManager是JDBC 的管理层,作用于用户和驱动程序间加载驱动程序,DriverManager类跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接
当DriverManager调用getConnection()方法来建立于数据库的链接时,DriverManager类首先从它已加载的驱动程序池中找到一个可以接受该数据库URL的驱动程序,然后请求该驱动程序使用相关的数据库URL去连接数据库。
通过调用方法Class.forName(),将显式的加载驱动程序类。forName的参数应该是 “公司名.数据库名.驱动程序名”
当调用DriverManager.getConnection()发出连接请求时,DriverManager将检查每一个驱动程序,看它是否可以建立连接
Connection getConnection(String url.String usr,String password)
url表示指向数据库的URL它的大致格式如下,jdbc:(subprotocol):(subname)
其中subprotrol表示子协议,制定连接何种数据库或使用什么方式连接数据库,subname表示确定一个连接,可以使一个数据源名,也可以指向一个网上的数据库
(2)Connection类
Connection 类是指向一个数据库的连接,作用是管理指向数据库的连接,连接过程中包含所执行的sql语句和在该链接上返回的结果,一个应用程序可以与单个数据库有一个或多个连接,也可以与许多数据库有链接。在完成同数据库连接的所有任务之后关闭该链接
常用的方法有
(1)close().用于关闭和数据库的链接,当一个Connection使用后,并没有被关闭,系统会将此连接保留一段时间,知道超时。使用方法如下
conn.close()
(2)isClosed()判断一个连接是否已经关闭,返回一个布尔值,关闭时返回true。反之
(3)commit()。提交对数据库的更改,使其生效,只有在禁止自动提交时,(setAutoCommit(false))需要使用这个方法,否则对数据库的更改会自动提交到数据库。
(4)getAutoCommit().检测该链接是否处于自动提交状态,自动状态时为true反之false
(5)isReadOnly()检测该链接是否是只读状态,返回一个布尔值。
(6)setAutoCommit()设置操作是否自动提交到数据库,[color=red]默认情况是true[/color],即新建的链接处于自动提交模式。
(7)setReadOnly可以把一个连接设置为只读
(8)createStatement .用于创建一个Statement,Statement用于执行SQL语句,使用方法
Statement stm=conn.createStatement();
createStatement()还可以带一些参数
如 Statement stm=conn.createStatement(type,concurrency);
其中type有以下几种情况
ResultSet.TYPE_FORWARD_ONLY,表示结果集记录指针只能向前移动
ResultSet.TYPE_SCROLL_INSENSITIVE表示结果集可以向前后移动,但数据库内容发生变化时结果集不变。
ResultSet.TYPE_SCROLL_SENTIVITY表示结果集可以前后移动,但数据库内容发生变化时结果集同步改变
参数concurrency决定是否可以用结果集更新
ResultSet.CONCUR_READ_ONLY,表示结果集只读,不能跟新数据表中的数据
ResultSet.CONCUR_UPDATE,表示是否可以通过结果集跟新数据库数据
(9)prepareCall(String sql)创建一个CallableStatement用于执行存储过程、
(10)prepareStatement()一条带有或不带IN
参数的sql语句可以被预编译并存放在PrepareStatement对象中,该对象用于有效的多次执行该语句。
(11)rollback。回滚当前的操作,并释放当前连接保存的任何数据锁,只有在禁止自动提交后才能使用该方法
3.Statement类
Java.sql.Statement用于在基层连接上运行sql语句,并且访问结果。Connection接口提供了生成Statement的方法,一般情况下通过connection.createStatement方法就可以得到Statement对象的实例
在使用中有三种Statment对象,分别是Statement,PrepareStatement和CallableStatement.
Statement对象用于执行不带参数的基本的sql语句,他的典型使用
Connection conn=DriverManager.getConnection(……);
Statement stm=conn.createStatement();
ResultSet rs=stm.executeQuery("sql");
……
PrepareStatement对象是从Statement继承过来的。用于执行带或不带IN参数的预编译的SQL语句,它的典型使用是
Connection conn=DriverManager.getConnection("url");
PrepareStatement pstm=conn.prepareStatement(" insert into person values(?,?,?,?)");
pstm.setInt(1,1);
pstm.setString(2,"twm");
pstm.setString(3,"boy");
pstm.setInt(4,25);
pstm.executeUpdate();
…………
CallableStatement对象是PrepareStatement继承过来的用于执行对数据库存储过程的调用
Statement对像还提供许多方法,其中常用的方法有
(1)execute().运行sql语句,返回一个是否有结果集的布尔值,使用方法如下
stm.execute(String sql);
其中参数是一条sql语句
(2)executeQuery()执行一条返回ResultSet的sql语句,返回值室友查询产生的数据集合,使用方法如下
stm.executeQuery(String sql);
其中sql是静态的select语句
(3)executeUpdate(),执行INSERT.UPDATE.DELETE或一条没有返回数据集的sql语句,
该方法返回影星语句的条数,
executeUpdate(String sql);
(4)cancel()用于一个线程取消令一个线程正在执行的语句使用方法如下
stm.cancel();
(5)getResultSet()用于得到当前ResultSet的结果
stm.getResultSet();
4 ResultSet类
在Statement执行sql语句时,有时候会返回ResultSet结果集,ResultSet往往包含的是查询的结果集,并可以通过它的不同的方法提取出查询结果
此接口抽象了运行select语句的结果,提供了逐行访问结果的方法,通过他可以访问结果的不同字段,它通过next()方法将当前的指针向前移动一行,最初指针位于第一行之前,因此第一次条用next()方法,把指针置于第一行上,使他成为当前行,随着每次调用next()依次获得ResultSet行