你想获得的多大的成功,你愿意为这份成功付出什么?
1. Dbutils
定义: 第三方类库,是数据库的工具类.
用途: 简化数据库操作的代码和JDBC链接的代码;
1. 对于数据表的读操作, 他可以把结果转换成list,Array, set 等java集合, 便于程序员的操作;
2.对数据表的写操作, 也变得简单,( 只需要sql语句 ).
3.可以使用数据源,使用 JNDI,数据库连接池 等技术来优化性能--重用已经构造号的数据池连接对象;
DBUtils包括3个包:
DBUtils 三个重要的类分别在三个包下面;
1. DBUtil 关闭数据库, close 或者 closeQuietly : 安静的关闭不会抛出异常 SQLException;
2.QueryRunner : 负责查询的对象的类,
3. ResultSetHandle : 查询结果的返回集
1. 增删改: 用QueryRunner.updata( collection ,sql, params ); 返回结果是int
例题: 1. 插入一条数据;
// 获取链接对象;
QueryRunner queryRunner = new QueryRunner();
Connection connection = DBUtil.getConnection();
String sql = "insert into goods values (null,?,?,?)";
// 替换占位符
Object[] params = { "糖", 4, "好吃不贵" };
int update = queryRunner.update(connection, sql, params);
System.out.println(update);
// 处理返回结果
DbUtils.closeQuietly(connection);
例题: 2.替换一条数据:
QueryRunner queryRunner = new QueryRunner();
String sql ="update goods set sname = ?,sprice=?";
Object[] object = {"漏气",100 };
Connection connection = DBUtil.getConnection();
int update = queryRunner.update(connection, sql, object);
System.out.println(update);
DbUtils.close(connection);
例题3.删除一条数据:
QueryRunner queryRunner = new QueryRunner();
String sql ="delete from goods where sid=?";
Object[] object = {2};
Connection connection = DBUtil.getConnection();
int update = queryRunner.update(connection, sql, object);
System.out.println(update);
DbUtils.close(connection);
2.org.apache.commons.dbutils.handlers 包下面的一些类 可以将查询的结果进行转化;
ArrayHandler :将ResultSet中第一行的数据转化成对象数组
ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]
BeanHandler :将ResultSet中第一行的数据转化成类对象
BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象
ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象
KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据
MapHandler :将ResultSet中第一行的数据存成Map映射
MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map
ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object
1.ArrayHandler: 来处理
private static void fun1ArrayHandler() throws SQLException {
// 使用ArrayHandler来处理
QueryRunner runner = new QueryRunner();
// 链接通往数据库的桥梁
Connection connection = DBUtil.getConnection();
String sql = "select * from goods";
// rsh = ResultSetHandler<T> rsh,
Object[] query = runner.query(connection, sql, new ArrayHandler());
//遍历返回的结果集 查看返回内容
//使用Arrayhanlder 查询时候,会返回数据库中 一条记录并且,会把该记录的字段放入一个object 数据中;
for (Object object : query) {
System.out.println(object);
}
}
2. BeanHandler来处理; 注意new BeanHandler<Goods>( type ); type 是.class文件;
// 使用BeanHandler来处理
// 可以将查询的结果帮你放入实体对象中;
QueryRunner runner = new QueryRunner();
// 链接通往数据库的桥梁
Connection connection = DBUtil.getConnection();
String sql = "select * from goods";
// 参数是放入的对象的实体类的.class文件类型;
Goods query = runner.query(connection, sql, new BeanHandler<Goods>(Goods.class));
System.out.println();
2.数据池 DataSourse( 数据源 数据库连接池 ) 实现类( BasicDataSource )
* 数据库链接池保存了许多connection;
* 在操作数据库时,实际最耗费创建连接和销毁连接;
* 当用户需要做查询数据库的操作时候,会从连接池中取出一个使用,使用完毕
* 不会销毁这个连接, 而是重新放入连接池中 备用
* Java 为数据库连接池准备一套规范接口;
* javax.sql 相当于扩展包; 接口dataSource 的实现类BasicDataSource
* 这套规范也是由数据库厂商实现;
* 并且该类也提供获取链接的方法;
* 常用数据库连接池
* DBCP C3P0;
例题: 利用数据库链接池 获取链接;
// 利用数据库连接池获取链接
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc01");
dataSource.setPassword("123456");
// 获取链接
Connection connection = dataSource.getConnection();
System.out.println(connection);
获取DataSource的工具类
public class DataSourceUtil {
// 声明一个basicDataSource
private static BasicDataSource dataSource = new BasicDataSource();
// 设置数据源
static {
// 设置基础设置;
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc01");
dataSource.setPassword("123456");
// 扩展设置. ()
// 初始化链接数量
dataSource.setInitialSize(10);
// 设置最大连接数量
dataSource.setMaxActive(8);
// 设置最大空闲链接数量
dataSource.setMaxActive(5);
// 设置最小连接数量
dataSource.setMaxIdle(1);
}
// 获取数据源的方法
public static DataSource getDataSource() {
return dataSource;
}
}
3.如何设置配置文件properties !
public class Demo08如何读取properties {
public static void main(String[] args) throws IOException {
// 读文件
Properties properties = new Properties();
// 获取bin文件夹路径路径classpath
URL url = JDBCUtils.class.getClassLoader().getResource("db.properties");
System.out.println(url);
// properties.load(); 保证bin文件下面要有这个文件
// 需要把配置文件放到工程目录的src 文件下面, 这时这个文件会被编译到bin文件夹下面;
InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
//从输入流中进行读取;
properties.load(inputStream);
System.out.println(properties.getProperty("url"));
}
}
public class DBUtil {
// 声明成员变量方便使用
private static Connection connection;
private static String url;
private static String password;
private static String username;
private static String driveClass;
static {
readFile();
//注册驱动
try {
Class.forName(driveClass);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 读文件的方法
public static void readFile() {
// 读文件
// 通过类加载器直接获取bin文件夹下的该文件
Properties properties = new Properties();
InputStream inputStream = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
try {
properties.load(inputStream);
driveClass = properties.getProperty("driveClass");
url = properties.getProperty("url");
password = properties.getProperty("password");
username = properties.getProperty("username");
} catch (IOException e) {
e.printStackTrace();
}
}
//获取链接 这里需要一个Connection;;
public static Connection getConnection() {
try {
connection = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException("获取链接时候失败");
}
return connection;
}
}