DBUtils、连接池
1.DBUtils
它是JDBC的簡化開發工具包
需項目導入commons-dbutils-1.6.jar
3個核心功能:
- QuerryRunner:提供對SQL語句操作的API
- ResultSetHandler:接口,用于定義select操作后,怎樣封裝結果集
- DBUtils類:一個工具類,定義了關閉資源與事務處理的方法
2.QuerryRunner
update(Connection conn,String sql,Object...params):用于完成表數據的增刪改;
query(Connection conn,String sql,ResultSetHandler<T> rsh,params):用于完成表數據的查詢操作
2.1添加
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="INSERT INTO zhangwu(name,money,parent VALUES(?,?,?))";Object[] params={"股票收入","5500","收入"};//分別對應3個?Connextion xonn=JDBCUtils.getCOnextion();int line=qr.update(conn,sql,params);System.out.println("line"+line);}catch(SQLException e){throw new RuntimeException(e);} }2.2更新
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="UPDATE zhangwu SET money=money+1000 WHERE name=?";Object[] params={"股票收入"};Connextion xonn=JDBCUtils.getCOnextion();int line=qr..update(conn,sql,params);System.out.println("line"+line);}catch(SQLException e){throw new RuntimeException(e);} }2.3刪除
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="DELETE FROM zhangwu WHERE name=?";Object[] params={"股票收入"};Connextion conn=JDBCUtils.getCOnextion();int line=qr..update(conn,sql,params);System.out.println("line"+line);}catch(SQLException e){throw new RuntimeException(e);} }2.4查詢
ResultSetHandler結果集處理類
2.4.1 ArrayHandler
將結果集中的第一條記錄封裝到一個Object[ ]數組中,數組中的每個元素就是這條記錄中的每一個字段的值。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu";Object params={};Connextion conn=JDBCUtils.getCOnextion();Object[] objArray=qr.query(conn,sql,new ArrayHandler(),params);System.out.println(Arrays.toString(objArray));}catch(SQLException e){throw new RuntimeException(e);} }2.4.2 ArrayListHandler
將結果集中的每一條記錄封裝到一個Object[ ]數組中,然后將這些數組在封裝到List集合中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();List<Object[]> list=qr.query(conn,sql,new ArrayListHandler(),params);for(Object[] arr:list){System.out.println(Arrays.toString(objArray));}}catch(SQLException e){throw new RuntimeException(e);} }2.4.3 BeanHandler
將結果集中的第一條記錄封裝到一個JavaBean中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();zhangwu zw=qr.query(conn,sql,new BeanHandler<zhangwu>(zhangwu.class),params);System.out.println(zw);}catch(SQLException e){throw new RuntimeException(e);} }- JavaBean:是一種Java語言寫成的可重用組件。(http://www.runoob.com/jsp/jsp-javabean.html)
- 為寫成JavaBean,類必須是具體的和公共的,并且具有無參數的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內部域暴露成員屬性,set和get方法獲取。
- 特點:
- 提供一個默認的無參構造函數。
- 需要被序列化并且實現了Serializable接口。
- 可能有一系列可讀寫屬性(私有字段:private 類型 字段名)
- 可能有一系列的"getter"或"setter"方法
- 屬性:
- 一個JavaBean對象的屬性應該是可訪問的。這個屬性可以是任意合法的Java數據類型,包括自定義Java類。
- 一個JavaBean對象的屬性可以是可讀寫,或只讀,或只寫。JavaBean對象的屬性通過JavaBean實現類中提供的兩個方法來訪問:
| getPropertyName() | 舉例來說,如果屬性的名稱為myName,那么這個方法的名字就要寫成getMyName()來讀取這個屬性。這個方法也稱為訪問器。 |
| setPropertyName() | 舉例來說,如果屬性的名稱為myName,那么這個方法的名字就要寫成setMyName()來寫入這個屬性。這個方法也稱為寫入器。 |
- 示例:
2.4.4 BeanListHandler
將結果集中的每一條記錄封裝到一個JavaBean中。再將這些JavaBean封裝到List集合中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();List<zhangwu> list=qr.query(conn,sql,new BeanListHandler<zhangwu>(zhangwu.class),params);for(zhangwu zw:list){System.out.println(zw);}}catch(SQLException e){throw new RuntimeException(e);} }2.4.5 ColumnListHandler
將結果集中指定的列的字段值封裝到一個List集合中。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT * FROM zhangwu WHERE money=?";Object params={2000};Connextion conn=JDBCUtils.getCOnextion();List<String> list=qr.query(conn,sql,new ColumnListHandler<String>(zhangwu.class),params);for(String str:list){System.out.println(str);}}catch(SQLException e){throw new RuntimeException(e);} }2.4.6 ScalerHandler
用于單數據,eg. select count(*) from user。
public void insert(){try{QuerryRunner qr=new QuerryRunner();String sql="SELECT MAX(money) FROM zhangwu";Object params={};Connextion conn=JDBCUtils.getCOnextion();Double max=qr.query(conn,sql,new ScalarHandler<Double>(),params);System.out.println("max="+max);}catch(SQLException e){throw new RuntimeException(e);} }2.4.7 MapHandler
將結果集中第一行數據封裝到Map集合中,key列名,value該列數據。
2.4.8 MapListHandler
將結果集的每一行封裝到一個Map中,再將這些Map封裝到List中。
3.連接池
用池管理連接Connection,以達到復用Connection的目的。
不用自己創建,通過池來獲取Connection對象。
調用Connection的close()方法,并不會關閉Connection,而是將它還給池,池可再分配它。
javax.sql.DataSource
Java為數據庫連接池提供的公共接口。
各個廠商應讓自己的連接池實現這個接口,以便應用程序可以方便切換不同廠商的連接池。
常見的連接池:DBCP、C3PO
3.1DBCP
tomcat內置的連接池。
導入jar包。
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar
DataSource:java提供的連接池規則接口,作為DriverManager工具的替代項。
在DBCP中提供了其實現類:BasicDataSource
創建連接池
public static BasicDataSource datasource=new BasicDataSource();public static final String DRIVERNAME="com.mysql.jdbc.Driver";public static final String URL="JDBC:MYSQL://LOCALHOST:3306/mydb";public static final String USERNAME="root";public static final String PAEEWORD="root";static{datasource.serDriverClassName(DRIVER);datasource.setUrl(URL);datasource.setUsername(USERNAME);datasource.sePassword(PASSWORD); }返回連接池對象
public static DataSource getDataSource{return datasource; }使用
public void insert(){try{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="INSERT INTO zhangwu (name,monet,parent) VALUES(?,?,?);Object[] params={"股票交易","5500","收入"};int line=qr.update(sql,params);//沒有conn這個參數了System.out.println("line="+line);}catch(SQLException E){throw new RuntimeException(e);} } public void search(){try{QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());String sql="INSERT INTO zhangwu (name,monet,parent) VALUES(?,?,?);Object[] params={"股票交易","5500","收入"};Product p=qr.query(sql,new BeanHandler<Product>(Product.class),params);System.out.println("line="+line);}catch(SQLException E){throw new RuntimeException(e);} }常見配置項
必須項
- driverClassName
- url
- username
- password
基本項(擴展)
- maxActive:最大連接數量
- minIdle:最小空閑連接
- maxIdle:最大空閑連接
- initialsize:初始化連接
?
總結
以上是生活随笔為你收集整理的DBUtils、连接池的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Data Base Conne
- 下一篇: 类加载、类加载器、反射