本文主要是介绍jdbc 常用接口类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.Driver接口
每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类,在加载某一驱 动程序的Driver类时,应该创建自己的实例并向java.sql.DriverManager类注册该实例。
通常情况下通过java.lang.Class类的静态方法forName(String className),加载欲连接数据库的 Driver类,该方法的入口参数为欲加载Driver类的完整路径。成功加载后,会将Driver类的实例注册到 DriverManager类中,如果加载失败,将抛出ClassNotFoundException异常,即未找到指定Driver类的 异常。
DriverManager类
java.sql.DriverManager类负责管理JDBC驱动程序的基本服务,是JDBC的管理层,作用于用户和驱动程 序之间,负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接;另外,DriverManager类也处 理诸如驱动程序登录时间限制及登录和跟踪消息的显示等工作。成功加载Driver类并在DriverManager类 中注册后,DriverManager类即可用来建立数据库连接。
当调用DriverManager类的getConnection()方法请求建立数据库连接时,DriverManager类将试图定位一 个适当的Driver类,并检查定位到的Driver类是否可以建立连接,如果可以则建立连接并返回,如果不 可以则抛出SQLException异常。
DriverManager类的方法:
1. getConnection(String url, String user, String password)
为静态方法,用来获得数据库连接,有3个入口参数,依次为欲连接数据库的URL、用户名和密码,返回 值类型为java.sql.Connection
2. setLoginTimeout(int seconds)
为静态方法,用来设置每次等待建立数据库连接的最长时间
3. setLogWriter(java.io.PrintWriter out)
为静态方法,用来设置日志的输出对象
4. println(String message)
为静态方法,用来输出指定消息到当前的JDBC日志流
二.Connection接口
java.sql.Connection接口代表与特定数据库的连接,在连接的上下文中可以执行SQL语句并返回结果, 还可以通过getMetaData()方法获得由数据库提供的相关信息,例如数据表、存储过程和连接功能等信息 常用方法:
1.createStatement()
创建并返回一个Statement实例,通常在执行无参的SQL语句时创建该实例
2.prepareStatement()
创建并返回一个PreparedStatement实例,通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进 行了预编译处理
3.prepareCall()
创建并返回一个CallableStatement实例,通常在调用数据库存储过程时创建该实例
4.setAutoCommit()
设置当前Connection实例的自动提交模式。默认为true,即自动将更改同步到数据库中;如果设为false ,需要通过执行commit()或rollback()方法手动将更改同步到数据库中
5.getAutoCommit()
查看当前的Connection实例是否处于自动提交模式,如果是则返回true,否则返回false
6.setSavepoint()
在当前事务中创建并返回一个Savepoint实例,前提条件是当前的Connection实例不能处于自动提交模式 ,否则将抛出异常
7.releaseSavepoint()
从当前事务中移除指定的Savepoint实例
8.setReadOnly()
设置当前Connection实例的读取模式,默认为非只读模式。不能在事务当中执行该操作,否则将抛出异 常。有一个boolean型的入口参数,设为true则表示开启只读模式,设为false则表示关闭只读模式
9.isReadOnly()
查看当前的Connection实例是否为只读模式,如果是则返回true,否则返回false
10.isClosed()
查看当前的Connection实例是否被关闭,如果被关闭则返回true,否则返回false
11.commit()
将从上一次提交或回滚以来进行的所有更改同步到数据库,并释放Connection实例当前拥有的所有数据 库锁定
12.rollback()
取消当前事务中的所有更改,并释放当前Connection实例拥有的所有数据库锁定。该方法只能在非自动 提交模式下使用,如果在自动提交模式下执行该方法,将抛出异常。有一个入口参数为Savepoint实例的 重载方法,用来取消Savepoint实例之后的所有更改,并释放对应的数据库琐定
13.close()
立即释放Connection实例占用的数据库和JDBC资源,即关闭数据库连接
三.Statement接口
java.sql.Statement接口用来执行静态的SQL语句,并返回执行结果。例如,对于insert、update和 delete语句,调用executeUpdate(String sql)方法,而select语句则调用executeQuery(String sql) 方法,并返回一个永远不能为null的ResultSet实例。
常用方法:
1.executeQuery(String sql)
执行指定的静态SELECT语句,并返回一个永远不能为null的ResultSet实例
2.executeUpdate(String sql)
执行指定的静态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
3.clearBatch()
清除位于Batch中的所有SQL语句。如果驱动程序不支持批量处理将抛出异常
4.addBatch(String sql)
将指定的SQL命令添加到Batch中。String型入口参数通常为静态的INSERT或UPDATE语句。如果驱动程序 不支持批量处理将抛出异常
5.executeBatch()
执行Batch中的所有SQL语句,如果全部执行成功,则返回由更新计数组成的数组,数组元素的排序与SQL 语句的添加顺序对应。数组元素有以下几种情况:①大于或等于零的数:说明SQL语句执行成功,为影响 数据库中行数的更新计数;②-2:说明SQL语句执行成功,但未得到受影响的行数③-3:说明SQL语句执 行失败,仅当执行失败后继续执行后面的SQL语句时出现。如果驱动程序不支持批量、或者未能成功执行 Batch中的SQL语句之一,将抛出异常
6.close()
立即释放Statement实例占用的数据库和JDBC资源
四.PreparedStatement接口
java.sql.PreparedStatement接口继承并扩展了Statement接口,用来执行动态的SQL语句,即包含参数 的SQL语句。通过PreparedStatement实例执行的动态SQL语句,将被预编译并保存到PreparedStatement 实例中,从而可以反复并且高效地执行该SQL语句。
需要注意的是,在通过setXXX()方法为SQL语句中的参数赋值时,建议利用与参数类型匹配的方法,也可 以利用setObject()方法为各种类型的参数赋值。
如:
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();
方法:
1.executeQuery()
执行前面包含参数的动态SELECT语句,并返回一个永远不能为null的ResultSet实例
2.executeUpdate()
执行前面包含参数的动态INSERT、UPDATE或DELETE语句,并返回一个int型数值,为同步更新记录的条数
3.setInt(int i, int x)
为指定参数设置int型值,对应参数的SQL类型为INTEGER
4.setLong(int i, long x)
为指定参数设置long型值,对应参数的SQL类型为BIGINT
5.setFloat(int i, float x)
为指定参数设置float型值,对应参数的SQL类型为FLOAT
6.setDouble(int i, double x)
为指定参数设置double型值,对应参数的SQL类型为DOUBLE
7.setString(int i, String x)
为指定参数设置String型值,对应参数的SQL类型为VARCHAR或LONGVARCHAR
8.setBoolean(int i, boolean x)
为指定参数设置boolean型值,对应参数的SQL类型为BIT
9.setDate(int i, Date x)
为指定参数设置java.sql.Date型值,对应参数的SQL类型为DATE
10.setObject(int i, Object x)
用来设置各种类型的参数,JDBC规范定义了从Object类型到SQL类型的标准映射关系,在向数据库发送时将被转换为相应的SQL类型
11.setNull(int i, int sqlType)
将指定参数设置为SQL中的NULL。该方法的第二个入口参数用来设置参数的SQL类型,并且必须设置,具体值从java.sql.Types类中定义的静态常量中选择
12.clearParameters()
清除当前所有参数的值
注意:
setXXX()方法的第一个入口参数为欲赋值参数的索引位置,从1开始;第二个入口参数为参数的值,类型 因方法而定。
五.CallableStatement接口
java.sql.CallableStatement接口继承并扩展了PreparedStatement接口,用来执行SQL的存储过程。
JDBC API定义了一套存储过程SQL转义语法,该语法允许对所有RDBMS通过标准方式调用存储过程。该语法定义了两种形式,分别是包含结果参数和不包含结果参数,如果使用结果参数,则必须将其注册为OUT型参数,参数是根据定义位置按顺序引用的,第一个参数的索引为1。
为参数赋值的方法使用从PreparedStatement中继承来的setXXX()方法。在执行存储过程之前,必须注册所有OUT参数的类型,它们的值是在执行后通过getXXX()方法获得的。
CallableStatement可以返回一个或多个ResultSet实例。处理多个ResultSet对象的方法是从Statement中继承来的。
六.ResultSet接口
java.sql.ResultSet接口类似于一个数据表,通过该接口的实例可以获得检索结果集,以及对应数据表的相关信息。例如列名和类型等,ResultSet实例通过执行查询数据库的语句生成。
ResultSet实例具有指向当前数据行的指针,最初,指针指向第一行记录的前方,通过next()方法可以将指针移动到下一行,如果存在下一行该方法则返回true,否则返回false,所以可以通过while循环来迭代ResultSet结果集。默认情况下ResultSet实例不可以更新,只能向前移动指针,所以只能迭代一次,并且只能按从前到后的顺序。如果需要,可以生成可滚动和可更新的ResultSet实例。
ResultSet接口提供了从当前行检索不同类型列值的getXXX()方法,均有两个重载方法,分别根据列的索引编号和列的名称检索列值,其中以列的索引编号较为高效,编号从1开始。对于不同的getXXX()方法,JDBC驱动程序尝试将基础数据转换为与getXXX()方法相应的Java类型并返回。
在JDBC 2.0 API(JDK 1.2)之后,为该接口添加了一组更新方法updateXXX(),均有两个重载方法,分别根据列的索引编号和列的名称指定列。可以用来更新当前行的指定列,也可以用来初始化欲插入行的指定列,但是该方法并未将操作同步到数据库,需要执行updateRow()或insertRow()方法完成同步操作。
方法:
first()
移动指针到第一行。如果结果集为空则返回false,否则返回true。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
last()
移动指针到最后一行。如果结果集为空则返回false,否则返回true。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
previous()
移动指针到上一行。如果存在上一行则返回true,否则返回false。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
next()
移动指针到下一行。指针最初位于第一行之前,第一次调用该方法将移动到第一行。如果存在下一行则返回true,否则返回false
beforeFirst()
移动指针到ResultSet实例的开头,即第一行之前。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
afterLast()
移动指针到ResultSet实例的末尾,即最后一行之后。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
absolute()
移动指针到指定行。有一个int型入口参数,正数表示从前向后编号,负数表示从后向前编号,编号均从1开始。如果存在指定行则返回true,否则返回false。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
relative()
移动指针到相对于当前行的指定行。有一个int型入口参数,正数表示向后移动,负数表示向前移动,视当前行为0。如果存在指定行则返回true,否则返回false。如果结果集类型为TYPE_FORWARD_ONLY将抛出异常
getRow()
查看当前行的索引编号。索引编号从1开始,如果位于有效记录行上则返回一个int型索引编号,否则返回0
findColumn()
查看指定列名的索引编号。该方法有一个String型入口参数,为欲查看列的名称,如果包含指定列,则返回int型索引编号,否则将抛出异常
isBeforeFirst()
查看指针是否位于ResultSet实例的开头,即第一行之前。如果是则返回true,否则返回false
isAfterLast()
查看指针是否位于ResultSet实例的末尾,即最后一行之后。如果是则返回true,否则返回false
isFirst()
查看指针是否位于ResultSet实例的第一行。如果是则返回true,否则返回false
isLast()
查看指针是否位于ResultSet实例的最后一行。如果是则返回true,否则返回false
close()
立即释放ResultSet实例占用的数据库和JDBC资源,当关闭所属的Statement实例时也将执行此操作
getInt()
以int型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0
getLong()
以long型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0
getFloat()
以float型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0
getDouble()
以double型获取指定列对应SQL类型的值。如果列值为NULL,则返回值0
getString()
以String型获取指定列对应SQL类型的值。如果列值为NULL,则返回值null
getBoolean()
以boolean型获取指定列对应SQL类型的值。如果列值为NULL,则返回值false
getDate()
以java.sql.Date型获取指定列对应SQL类型的值。如果列值为NULL,则返回值null
getObject()
以Object型获取指定列对应SQL类型的值。如果列值为NULL,则返回值null
getMetaData()
获取ResultSet实例的相关信息,并返回ResultSetMetaData类型的实例
updateNull()
将指定列更改为NULL。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateInt()
更改SQL类型对应int型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateLong()
更改SQL类型对应long型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateFloat()
更改SQL类型对应float型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateDouble()
更改SQL类型对应double型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateString()
更改SQL类型对应String型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateBoolean()
更改SQL类型对应boolean型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateDate()
更改SQL类型对应Date型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
updateObject()
可更改所有SQL类型的指定列。用于插入和更新,但并不会同步到数据库,需要执行updateRow()或insertRow()方法完成同步
moveToInsertRow()
移动指针到插入行,并记住当前行的位置。插入行实际上是一个缓冲区,在插入行可以插入记录,此时,仅能调用更新方法和insertRow()方法,通过更新方法为指定列赋值,通过insertRow()方法同步到数据库,在调用insertRow()方法之前,必须为不允许为空的列赋值
moveToCurrentRow()
移动指针到记住的位置,即调用moveToInsertRow()方法之前所在的行
insertRow()
将插入行的内容同步到数据库。如果指针不在插入行上,或者有不允许为空的列的值为空,将抛出异常
updateRow()
将当前行的更新内容同步到数据库。更新当前行的列值后,必须调用该方法,否则不会将更新内容同步到数据库
deleteRow()
删除当前行。执行该方法后,并不会同步到数据库,而是在执行close()方法后同步到数据库
这篇关于jdbc 常用接口类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!