Java篇-DBUtils與連線池
一 : DBUtils
DBUtils
就是為了簡化JDBC
的快發而產生的開發工具包.對JDBC
的一種封裝.
核心功能
1. QueryRunner 中提供對sql語句操作的API
update(Connection conn, String sql, Object... params)
用來完成資料表的增刪改操作.
增添
//增 public static void insert() throws SQLException{ Object[] par = {"牛油果熱辣藤椒雞超級可塔",23.5}; String sql = "insert into product (pname,price) values (?,?)"; QueryRunner qr = new QueryRunner(); int row = qr.update(con, sql, par); System.out.println(row); DbUtils.close(con); }
刪除
//刪 public static void delete() throws SQLException{ String sql = "delete from product where id = ?"; QueryRunner qr = new QueryRunner(); int row = qr.update(con, sql, 4); System.out.println(row); DbUtils.close(con); }
更改
//改 public static void update() throws SQLException{ Object[] par = {"肯德基CP堡",28.5,2}; String sql = "update product set pname = ?,price = ? where id = ?"; QueryRunner qr = new QueryRunner(); int row = qr.update(con, sql, par); System.out.println(row); DbUtils.close(con); }
2. ResultSetHandler介面,用於定義select操作後,怎樣封裝結果集.
其子類以及功能包括
子類功能列表
JavaBean
介紹,好像是我們通常用的mvc中model模型,其實就是一個類,
提供私有欄位 : private型別 欄位名;
提供getter/setter方法;
提供無參
構造器,注意:無參構造器一定要提供否則會報錯.
也可以實現java.io.Serializable介面
package com.tiantianBaby.java;public class Product { private int id; private String pname; private String price; public Product() { } public Product(int id, String pname, String price) { super(); this.id = id; this.pname = pname; this.price = price; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public String getPrice() { return price; } public void setPrice(String price) { this.price = price; } @Override public String toString() { return "Product [id=" + id + ", pname=" + pname + ", price=" + price + "]"; } }
ArrayHandler
public static void arrayHander() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); Object[] arr = qr.query(con, sql, new ArrayHandler()); for(Object obj : arr){ System.out.println(obj); } }
列印
1 漢堡王大漢堡 23.0
ArrayListHandler:
//ArrayListHandler public static void ArrayListHandler()throws SQLException { String sql = "select * from product"; QueryRunner qr = new QueryRunner(); List<Object[]> list = qr.query(con, sql,new ArrayListHandler()); for(Object[] itemarr : list) { for(Object obj:itemarr) { System.out.print(obj+" "); } System.out.println(); } }
列印
1 漢堡王大漢堡 23.0 2 肯德基CP堡 28.5 3 蘋果筆記本 14000.0 6 板燒雞腿堡 18.0 7 牛油果熱辣藤椒雞超級可塔 23.5 8 肯德基水果茶 11.8
BeanHandler
public static void BeanHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); Product pro = qr.query(con, sql,new BeanHandler<Product>(Product.class)); System.out.println(pro); }
列印
Product [id=1, pname=漢堡王大漢堡, price=23]
BeanListHandler
public static void BeanListHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); List<Product> list = qr.query(con, sql,new BeanListHandler<Product>(Product.class)); for(Product p : list) { System.out.println(p); } }
列印
Product [id=1, pname=漢堡王大漢堡, price=23] Product [id=2, pname=肯德基CP堡, price=28.5] Product [id=3, pname=蘋果筆記本, price=14000] Product [id=6, pname=板燒雞腿堡, price=18] Product [id=7, pname=牛油果熱辣藤椒雞超級可塔, price=23.5] Product [id=8, pname=肯德基水果茶, price=11.8]
ColumnListHandler
public static void columnListHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); List<String> list = qr.query(con, sql,new ColumnListHandler<String>("pname")); for(Object obj : list) { System.out.println(obj); } }
列印
漢堡王大漢堡 肯德基CP堡 蘋果筆記本 板燒雞腿堡 牛油果熱辣藤椒雞超級可塔 肯德基水果茶
ScalarHandler
public static void ScalarHandler() throws SQLException { String sql = "select count(*) from product"; QueryRunner qr = new QueryRunner(); long count = qr.query(con, sql,new ScalarHandler<Long>()); System.out.println(count); }
列印
6
MapHandler
public static void mapHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); Map<String,Object> map = qr.query(con, sql,new MapHandler()); for(String str : map.keySet()) { System.out.println(str+"---"+map.get(str)); } }
列印
id---1pname---漢堡王大漢堡 price---23.0
MapListHandler
public static void mapListHandler() throws SQLException{ String sql = "select * from product"; QueryRunner qr = new QueryRunner(); List<Map<String,Object>> list = qr.query(con, sql, new MapListHandler()); for(Map<String,Object> map : list) { for(String key : map.keySet()) { System.out.print(key+"---"+map.get(key)+" "); } System.out.println(); } }
列印
id---1 pname---漢堡王大漢堡 price---23.0 id---2 pname---肯德基CP堡 price---28.5 id---3 pname---蘋果筆記本 price---14000.0 id---6 pname---板燒雞腿堡 price---18.0 id---7 pname---牛油果熱辣藤椒雞超級可塔 price---23.5 id---8 pname---肯德基水果茶 price---11.8
3. DbUtils類,提供了關閉資源與實務的處理方法
DbUtils.close(con);
二 : 連線池
用池來管理Connection
,這樣可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是透過池來獲取Connection物件。當使用完Connection後,呼叫Connection的close()方法也不會真的關閉Connection,而是把Connection“歸還”給池。池就可以再利用這個Connection物件了。
在開發中“獲得連線”或“釋放資源”是非常消耗系統資源的兩個過程,所以通常用連線池結束,來共享連線Connection.這樣就不用每次都建立連線,釋放連結了,這些操作都交給連線池.
DBCP連線池
DBCP是一個開源的連線池,是Apache Common
成員之一,在企業開發中也比較常見,tomcat
內建的連線池.
匯入jar包
匯入jar包
DataSource介面
DataSource
是java中提供的連線池,作為DriverManager
工具的代替項.
在DBCP提供介面的實現類, 我們要用的具體的連線池BasicDataSource
類.
BasicDataSource類的常見配置
分類 屬性 | 描述 |
---|---|
driverClassName | 資料庫驅動名稱 |
url | 資料庫的地址 |
username | 使用者名稱 |
password | 密碼 |
maxActive | 最大連線數量 |
minActive | 最小連線數量 |
maxIdle | 最大空閒連線 |
minIdle | 最小空閒連線 |
initialSize | 初始化連線 |
連線
public class DataSourceDemo { public static void main(String[] args) { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/javadatabase"); dataSource.setUsername("root"); dataSource.setPassword("newpass"); try { Connection con = dataSource.getConnection(); System.out.println(con); } catch (SQLException e) { // e.printStackTrace(); throw new RuntimeException("資料庫連線失敗"); } } }
封裝工具類
其中地址url,使用者名稱和密碼,都可以用檔案進行動態配置.
public class JDBCUtils { private static BasicDataSource datasource = new BasicDataSource(); static{ //資料庫連線資訊,必須的 datasource.setDriverClassName("com.mysql.jdbc.Driver"); datasource.setUrl("jdbc:mysql://localhost:3306/javadatabase"); datasource.setUsername("root"); datasource.setPassword("newpass"); //物件連線池中的連線數量配置,可選的 datasource.setInitialSize(10);//初始化的連線數 datasource.setMaxActive(8);//最大連線數量 datasource.setMaxIdle(5);//最大空閒數 datasource.setMinIdle(1);//最小空閒 } public static DataSource getDataSource() { return datasource; } }
測試工具類
public class QueryRunnerTest { public static void main(String[] args) {// select(); insert(); } private static QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); public static void insert() { String sql = "insert into product (pname,price) values(?,?)"; Object[] parms = {"肯德基水果茶","11.8"}; try { int row = qr.update(sql,parms); System.out.println(row); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException("資料新增失敗"); } } public static void select() { String sql = "select * from product"; try { List<Object[]> list = qr.query(sql, new ArrayListHandler()); for(Object[] obs : list) { for(Object item : obs) { System.out.print(item + "t"); } System.out.println(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException("資料查詢失敗"); } } }
作者:TianTianBaby223
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2817194/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python資料庫連線池DButilsPython資料庫
- Http持久連線與HttpClient連線池HTTPclient
- Java技術之掌握資料庫連線工具DBUtils的應用Java資料庫
- 【JDBC】java連線池模擬測試 連線oracleJDBCJavaOracle
- 簡單的登入註冊(前端+後端+MySQL資料庫 DRuid連線池 DBUtils)前端後端MySql資料庫UI
- 【很全很新】C3P0 連線池和 DBUtils 配合事務使用總結
- java操作redis叢集連線池JavaRedis
- 連線池
- ServiceStack.Redis的原始碼分析(連線與連線池)Redis原始碼
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- django連線池Django
- HTTP連線池HTTP
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- Java GenericObjectPool 物件池化技術--SpringBoot sftp 連線池工具類JavaObject物件Spring BootFTP
- Java中的資料庫連線池:HikariCP與C3P0Java資料庫
- JavaWEB開發13——事務與連線池JavaWeb
- 連線池和連線數詳解
- java jdbc深入理解(connection與threadlocal與資料庫連線池和事務實)JavaJDBCthread資料庫
- ElasticSearch連線池建立Elasticsearch
- 自定義連線池
- golang開發:類庫篇(二) Redis連線池的使用GolangRedis
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- go 語言連線池Go
- Golang SQL連線池梳理GolangSQL
- Tomcat 的 JDBC 連線池TomcatJDBC
- 【JDBC】java連線池模擬測試連線Oracle資料庫指令碼參考JDBCJavaOracle資料庫指令碼
- 《四 資料庫連線池原始碼》手寫資料庫連線池資料庫原始碼
- 資料庫連線池設計和實現(Java版本)資料庫Java
- Java技術分享:什麼是資料庫連線池?Java資料庫
- golang連線MySQL時候的連線池設定GolangMySql
- 【JDBC】使用OracleDataSource建立連線池用於連線OracleJDBCOracle
- Flask資料庫連線池Flask資料庫
- HikariCP連線池的學習
- 安裝配置PGBouncer連線池
- cx_Oracle.SessionPool 連線池OracleSession
- MOSN 原始碼解析 - 連線池原始碼
- python資料庫連線池Python資料庫
- Spring系列之HikariCP連線池Spring