1. 程式人生 > >引入jar包操作資料庫與連線池

引入jar包操作資料庫與連線池

commons-dbutils-1.6.jar

1.commons-dbutils-1.6.jar
 操作JDBC連線資料庫 並且執行sql語句 處理返回的結果集
 三個核心類
 DbUtils: 關閉資源的方法(安靜的關閉 不用異常處理)
 QueryRunner: 執行sql語句 並且返回你想要的結果集
 引數: ResultSetHandler是介面(使用它的實現類 想要什麼結果集 就傳入什麼該類的介面)
 // 插入資料
 private static void insert() throw SQLException{
     // 插入一條資料使用QueryRunner
     QueryRunner qr = new QueryRunner();
     // 獲取連線 (JDBCUtil是自己寫好的建立連線和關閉資源的工具類)
Connection connection = JDBCUtil.getConnection(); String sql = "insert into sort values (null, '顯示器', 5,'這是一臺顯示器'); // 插入資料 int row = qr.update(connection.sql); if(row > 0){ System.out.println("插入成功"); } // 安靜的關閉資源 DbUtil.closeQuietly(connection); } // 修改資料 private static void update() throw SQLException{ QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); // 使用佔位符傳入sql語句
String sql = "update sort set sname=?, sprice=?, sdesc=? where sid=5"; // 多引數傳參 方式1 利用陣列傳 // 方式2 直接傳遞引數 注意要和佔位符號的順序 對應 Object[] params = {"咖啡",1000,"java裡的咖啡"}; int row = qr.update(connection, sql, "咖啡1",2000,"java裡的咖啡"); if (row > 0) { System.out.println("修改成功"
); } DbUtils.closeQuietly(connection); }
2.使用QueryRunner進行查詢操作  給QueryRunner傳入的引數不同 返回的結果集也不同
@Test
    public void select1() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        // 呼叫查詢方法
        // 傳入什麼內容 該類就把資料放到什麼容器中 給你返回
        Object[] objects = qr.query(connection, sql, new ArrayHandler());
        for (Object object : objects) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }
    /*
     * ArrayListhandler
     * 查詢每一條記錄 放到List集合中
     * 每一條記錄是一個物件陣列
     */
    @Test
    public  void select2() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object[]> list = qr.query(connection, sql, new ArrayListHandler());
        for (Object[] objects : list) {
            for (Object object : objects) {
                System.out.println(object);
            }
            System.out.println();
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * BeanHandler
     * 把結果集的第一行 封裝成一個JavaBean物件
     * JavaBean物件規則
     * 1.成員變數私有化
     * 2.提供空參的構造方法
     * 3.提供set/get方法
     * 符合以上規則的實體類創建出來的物件 就是一個JavaBean物件
     * 
     */
    @Test
    public void select3() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        // 要把使用哪個javabean實體類 傳進去
        // 類名.class
        Sort sort = qr.query(connection, sql, new BeanHandler<>(Sort.class));
        if (sort == null) {
            System.out.println("沒有該資料");
        }
        System.out.println(sort);
        DbUtils.closeQuietly(connection);
    }

    /*
     * BeanListHandler 
     * 返回全部資料
     */
    @Test
    public void select4() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Sort> list = qr.query(connection, sql, new BeanListHandler<>(Sort.class));
        for (Sort sort : list) {
            System.out.println(sort);
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * ColumnListHandler
     * 返回指定列的資料 放在list中返回
     */
    @Test
    public void select5() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<String> list = qr.query(connection, sql, new ColumnListHandler<String>("sname"));
        for (String string : list) {
            System.out.println(string);
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * ScalarHandler
     * 只返回一個結果 多用於sql語句的聚合查詢
     */
    @Test
    public void select6() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select avg(sid) from sort";
        BigDecimal query = qr.query(connection, sql, new ScalarHandler<BigDecimal>());
        System.out.println(query);
        DbUtils.closeQuietly(connection);
    }

    /*
     * MapHandler
     * 將第一條資料存放在map中 以鍵值對的形式 鍵:列名  值: 列值
     */
    @Test
    public void select7() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        Map<String, Object> map = qr.query(connection, sql, new MapHandler());
        for (String key : map.keySet() ) {
            System.out.println(key + "  " + map.get(key));
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     *  MapListHandler
     *  返回全部資料 將存有資料的map存到list中 在返回去
     */
    @Test
    public void select8() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Map<String,Object>> list = qr.query(connection, sql, new MapListHandler());
        for (Map<String, Object> map : list) {
            for (String key : map.keySet()) {
                System.out.println(key + "  " + map.get(key));
            }
        }
        DbUtils.closeQuietly(connection);
    }
}

連線池

  java為了解決頻繁建立資料庫連線和釋放資料庫連線的問題
  使用資料庫連線池來解決 並且出了一套規範
  資料庫連線規範(介面)
  javax.sql.DataSource  java擴充套件包
  由資料庫廠商來提供的 
  常用資料庫連線池 DBCP C3P0
  需要匯入的jia包(dbcp中依賴pool jia包種的類)
  commons-dbcp-1.4.jar
  commons-pool-1.5.6.jar
  BasicDataSource 是 DataSource(規範類) 的實現類
  基礎設定 (要使用資料庫連線池 必須要設定的內容)
  mysql驅動類 com.mysql.jdbc.Driver
  訪問資料庫連線地址
  資料庫訪問使用者名稱 和 密碼
  public class DataSourceUtil {
    private static BasicDataSource dataSource = new BasicDataSource();
    static {
        // 設定dataSource
        // mysql的驅動類的許可權定類名
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        // 擴充套件設定
        // 初始化連線數
        dataSource.setInitialSize(10);
        // 最大活動數
        dataSource.setMaxActive(8);
        // 最大空閒連線數
        dataSource.setMaxIdle(5);
        // 最小空閒連線數
        dataSource.setMinIdle(2);
    }
    // 獲取資料庫連線池方法
    public static DataSource getDataSource() {
        return dataSource;
    }   
}
//  測試DataSourceUtil類
public static void main(String[] args) throws SQLException {
        // 資料庫連線池和QueryRunner結合使用
        QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource());
        // 插入一條資料
        String sql = "insert into sort values (null, ?, ?, ?)";
        Object[] params = {"試卷", 10, "一份萬分試卷"};
        int row = qr.update(sql, params);
        if (row > 0) {
            System.out.println("插入成功");
        }
    }