JDBC使用第三方架包

一、commons-dbutils-1.6.jar

1.作用:用於操作jdbc連接數據庫並且用來執行是sql語句處理返回結果集的架包
2.三個核心類
1)DbUtils:用來關閉資源的類,其中的closeQuietyl()方法關閉資源時,不需要進行異常處理
2)QueryRunner:用來查詢結果集,並且返回你想要的結果集
3)參數ResultSetHandel是接口,我們想要什麼結果集,就用它對應的實現類
eg:通過第三方架包實現數據的更新和添加

public class Demo01{
publc static void main(String [] args) throws SQLException{
//添加方法
    //insert();
 //更新方法
  update();
}
  //更新方法
  private static void update() throws SQLException{
      QueryRunner qr = new QueryRunner();
     //獲取連接
     Connection connection = JDBCUtil.getConnection();
    //使用佔位符傳入sql語句
String sql = "update sort set sname =?"+",sprice=?,sdesc=? where sid=5";
//方式一,利用數組
Object[] params = {"咖啡",10000,"java裏的咖啡"};
int row = qr.update(connection,sql,params)
//方式二,直接船體,要和佔位符對應
int row = qr.update(connection,sql,"咖啡",10000,"java裏的咖啡");
if(row>0){
    System.out.println("修改成功");
}
//用第三方的關閉資源
DbUtils.closeQuietly(connection);
  }
  //添加
  private static void insert() throws SQLException{
      QueryRunner qr = new QueryRunner();
      Connection connection = JDBCUtil.getConnection();Connection connection = JDBCUtil.getConnection();
        String sql = "insert into sort values (null,'20k顯示器',5,'這時一臺播放家教的顯示器')";

       int row = qr.update(connection, sql);
       System.out.println(row);
       if(row>0) {
           System.out.println("顯示成功");
       }
       //安靜的關閉資源
       DbUtils.closeQuietly(connection);
}
}
//第三方架包的查詢
public class Demo02 {
//查詢操作
//8個結果集
    /*
     * 結果集容器1
     * ArrayHandler
     * 把查詢出來的數據的第一行,放進對象數據中並返回
     * 
     */
    @Test
    public void select1() throws SQLException {
        QueryRunner qr =new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "Select * from sort";
        //調用查詢方法
        //傳入什麼容器,該類就把數據放到什麼容器中給你返回
        Object[] rel = qr.query( connection,sql, new ArrayHandler());
        for (Object object : rel) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);   
    }
    /*
     * ArrayListHander
     * 查詢每一條記錄放到ArrayListHander集合中
     * 每一條記錄是一個對象數組
     */
    @Test
    public void select2() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object[]> query = qr.query(connection, sql, new ArrayListHandler());
        for (Object[] objects : query) {
            for (Object object : objects) {
                System.out.println(object);
            }
            System.out.println();
        }
        DbUtils.closeQuietly(connection);
    }

 /*
  * BeanHandler
  * 把結果集的第一行封裝成一個JavaBean對象
  * 1.成員變量私有化
  * 2.提供空參的構造方法
  * 3.提供set/get方法
  * 符合以上的規則的實體類創建出來的對象
  * 
  */
    @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));
        System.out.println(sort);
        if(sort==null) {
            System.out.println("沒有該條數據");
        }
        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<Object> query = qr.query(connection, sql, new ColumnListHandler<>("sname"));
        for (Object object : query) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }
    /*
     * ScalarHandler 查詢只有一個結果
     *  
     *  查詢結果是一個的時候使用的
     */
    @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
     * 
     * 
     */

    @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
     * 
     * 
     */

    @Test
    public void select8() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql= "select * from sort";
        List<Map<String, Object>> query = qr.query(connection, sql, new MapListHandler());
         for (Map<String, Object> map : query) {
             for (String key : map.keySet()) {
                System.out.println(key + " "+ map.get(key));
            }
        }
         DbUtils.closeQuietly(connection);
    }



}
3.數據源
/*
 * 數據源
 * java爲了解決頻繁創建數據庫連接和釋放數據庫連接的問題
 * 使用數據庫連接池來解決  並且 出了一套規範-- 數據庫連接池規範(接口)、
 * javax.sql.DataSource  java擴展包
 * 由數據庫廠商來提供的
 * 常用數據庫連接池:DBCP  C3P0
 * 需要導入的架包:導入的dbcp中的類需要引用pool jar中的類
 * commons-dbcp-1.4.jar
 * commons-pool-1.5.6.jar
 * 基礎設置(要使用數據庫連接池,必須要設置的內容):
 * BasicDataSource 和 DataSource的關係
 *BasicDataSource 是DataSource(規範類)的實現類
 *mysql驅動類 com.mysql.jdbc.Driver
 *訪問數據庫的鏈接地址
 *訪問數據庫的用戶名和密碼
 */
public class DataSourceUtil {
    //獲取數據庫,連接池
    private static BasicDataSource  dataSource = new BasicDataSource();
    static {
        //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;
     }
    //設置dataSorce
    //獲取數據連接


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章