你想获得的多大的成功,你愿意为这份成功付出什么?
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中一条记录的其中某一列的数据存成Object1.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; } }