Jdbc--Dbutils工具

Dbutils工具:

Dbutils是对jdbc的一个简单封装,可以让我们在书写jdbc代码时,更加简单方便 。

 

元数据:

元数据MetaData : 指数据库中 库、表、列的定义信息

1、库元数据:

DataBaseMetaData代表的是数据库的元数据。

获取:con.getMetaData();返回一个DataBaseMetaData对象。

DataBaseMetaData对象的方法:

getURL():返回一个String类对象,代表数据库的URL。

getUserName():返回连接当前数据库管理系统的用户名。

getDriverName():返回驱动驱动程序的名称。

getPrimaryKeys(String catalog, String schema, String table):返回指定表主键的结果集

2、ParameterMetaData

我们使用PreparedStatement执行sql语句时,可以在sql语句中使用”?”占位符,

而ParameterMetaData它就是用于获取占位符相关信息。

可以通过PreparedStatement对象的getparameterMetaData()方法获取到parameterMetaData对象。

常用方法:

a)getParameterCount() 

i.获得指定参数的个数

b)getParameterTypeName(int param) 

i.获得指定参数的sql类型

注意:获取占位符的类型时,会产生异常需要在URL后面加上:generateSimpleParameterMetadata=true。

然而添加后异常没有了,但是参数类型却都是varchar类型,因为MySQL的数据库驱动对此方法的支持有问题。

3、ResultSetMetaData

它描述的是select语句执行后获取的结果集的相关信息

通过ResultSet接口的getMetaData()方法获取ResultSetMetaData对象。也可以通过PreparedStatement对象获取

常用方法:

a)getColumnCount() 

i.返回resultset对象的列数

b)getColumnName(int column) 

i.获得指定列的名称

c) getColumnTypeName(int column)

i.获得指定列的类型 

 

dbutils:

dbutils是对jdbc代码的封装.

导包:

commons-dbutils-1.4.jar。

核心:

1.QueryRunner类

在QueryRunner类中有三个方法

1)query方法  它是用于执行select语句

2)update方法  它是用于执行insert,update delete语句

3)batch方法  它是用于执行批处理

2.DbUtils类

它的方法全是static,它提供了关于事务及关闭资源的操作

3.ResultSetHandler接口

它的主要作用是对select语句执行后得到的结果集进行封装。

怎样封装结果集是需要我们自己手动完成。

但是ResultSetHandler提供了九个实现类,可以按照一定的规则对结果集进行封装。

 

QueryRunner:

构造方法:

QueryRunner();

QueryRunner(DataSource ds);

对于我们使用QueryRunner,用以上两个构造就可以。它们的区别:

如果是无参数的,那么在使用它的query,update,batch方法时,就需要有Connection参数的。我们需要进行手动的事务控制。

如果是有参数的QueryRunner,那么在使用它的query,update,batch方法时,就不需要使用有Connection参数的方法。事务是自动处理的。

操作sql的方法:

query(Connection conn, String sql, ResultSetHandler rsh) Execute an SQL SELECT query without any replacement parameters.

query(Connection conn, String sql, ResultSetHandler rsh, Object... params) Execute an SQL SELECT query with replacement parameters.

以上配合无参构造使用。

query(String sql, ResultSetHandler rsh) Executes the given SELECT SQL without any replacement parameters.

query(String sql, ResultSetHandler rsh, Object... params)  Executes the given SELECT SQL query and returns a result object.

以上配置有参数QueryRunner构造使用

其它参数使用:

1.sql  代表要执行的sql语句

2.rsh  代表查询执行后得到的结果集怎样封装。

3.params 它代表的是sql语句中的占位符的值

返回值:

代表的是结果集封装的对象的类型

Update:

有Connection参数与无参数的QueryRunner构造使用

无Connection参数与有参数的QueryRunner构造使用

其它参数

1.sql  要执行的sql语句

2.params sql语句中的占位符的值

返回值

类型是int,它与executeUpdate方法返回值类似。

Batch:

有Connection参数与无参数的QueryRunner构造使用

无Connection参数与有参数的QueryRunner构造使用

其它参数

1.sql  要执行的sql语句

2.params,它是一个二维数组,就是我们要批处理的sql语句的参数

简单说,二维数组中的每一个一维数组的内容就是一条sql语句的参数。

 

ResultSetHandler:

在ResultSetHandler接口中的handle方法,它的参数就是我们执行sql语句后得到的结果集. 

public int update(Connection con, String sql, Object... params)

throws SQLException {

// 1.得到一个PreparedStatement对象

PreparedStatement pst = con.prepareStatement(sql);

// 2.对参数赋值

// 可以通过ParameterMetaData来获取sql语句中相关的参数信息

ParameterMetaData pmd = pst.getParameterMetaData();

// 2.1 得到参数有几个

int count = pmd.getParameterCount();

if (count == params.length) {

// 2.2对参数进行赋值

for (int i = 1; i <= count; i++) {

pst.setObject(i, params[i - 1]);

}

}

// 3.执行操作

return pst.executeUpdate();

}

2.query方法实现

public T query(Connection con, String sql, MyResultSetHandler mrs,

Object... params) throws Exception {

// 1.得到一个PreparedStatement对象

PreparedStatement pst = con.prepareStatement(sql);

// 2.对参数赋值

// 可以通过ParameterMetaData来获取sql语句中相关的参数信息

ParameterMetaData pmd = pst.getParameterMetaData();

// 2.1 得到参数有几个

int count = pmd.getParameterCount();

if (count == params.length) {

// 2.2对参数进行赋值

for (int i = 1; i <= count; i++) {

pst.setObject(i, params[i - 1]);

}

}

// 3.执行操作

ResultSet rs = pst.executeQuery();

return mrs.handle(rs); // 调用接口中的handle方法将结果集封装成指定的对象。

我们在使用query方法时,必须传递一个MyResultSetHandler接口实现类的对象

}

 

ResultSetHandler接口九个实现类:

ArrayHandler,它是将结果集中第一条记录封装到一个Object[]数组中。

ArrayListHandler,它是将结果集中每一条记录封装到Object[]数组中,在将这些数组封装到List集合中

BeanHandler, 它是将结果集中第一条记录封装到一个指定的javaBean中。

BeanListHandler, 它是将结果集中每一条记录封装到javaBean中,在将这些javaBean在封装到List集合中

ColumnListHandler,  将结果集中指定的列封装到List集合中。

KeyedHandler, 将结果集中每一条记录封装到Map,在将这些Map集合在封装到一个Map信,这个Map集合的key是我们指定的一个列的值,value就是Map;

MapHandler, 将结果集中第一条记录封装到了Map key就是字段名称,value是对应的字段值。

MapListHandler, 将结果集中每一条记录封装到了Map key就是字段名称,value是对应的字段值。在将Map封装到List集合.

 

你可能感兴趣的:(jdbc)