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
query(Connection conn, String sql, ResultSetHandler
以上配合无参构造使用。
query(String sql, ResultSetHandler
query(String sql, ResultSetHandler
以上配置有参数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
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
MapHandler, 将结果集中第一条记录封装到了Map
MapListHandler, 将结果集中每一条记录封装到了Map