java中QueryRunner用法(增、刪、改、查詳解)
1.匯入相應的JARs
MySQL驅動jar包:mysql-connector-Java-5.1.28-bin.jar
C3P0需要的jar包:c3p0-0.9.2-pre1.jar和mchange-commons-0.2.jar
2.在src下新增C3P0配置檔案:c3p0-config.xml
[html] view plain copy print?- <?xmlversion="1.0"encoding="UTF-8"?>
- <c3p0-config>
- <default-config>
-
<propertyname="jdbcUrl"
- <propertyname="driverClass">com.mysql.jdbc.Driver</property>
- <propertyname="user">root</property>
- <propertyname="password">123</property>
-
<propertyname="acquireIncrement">3</property
- <propertyname="initialPoolSize">10</property>
- <propertyname="minPoolSize">2</property>
- <propertyname="maxPoolSize">10</property>
- </default-config>
- </c3p0-config>
3.封裝為JdbcUtils,用來獲取Connection物件,以及開啟和關閉事務。有以下介面:
-
Connection getConnection():從c3p0連線池獲取Connection物件,所以需要提供c3p0-config.xml配置檔案;
-
beginTransaction():為當前執行緒開啟事務;
-
commitTransaction():提交當前執行緒的事務;
-
rollbackTransaction():回滾當前執行緒的事務;
-
releaseConnection(Connection):如果引數連線物件不是當前事務的連線物件,那麼關閉它,否則什麼都不做;
4.測試JdbcUtils
[java] view plain copy print?- @Test
- publicvoid testJdbcUtils() throws SQLException {
- Connection con = JdbcUtils.getConnection();
- System.out.println(con);
- JdbcUtils.releaseConnection(con);
- System.out.println(con.isClosed());
- }
5.封裝TxQueryRunner,使用JdbcUtils連線資料庫,使用QueryRunner簡化資料庫操作
引入jar包:commons-dbutils-1.4.jar,有以下介面:
-
int[] batch(String sql, Object[][] params):執行批處理,引數sql是SQL語句模板,params為引數;
-
T query(String sql, ResultSetHandler<T> rh):執行查詢,執行查詢,引數sql為要執行的查詢語句模板,rh是結果集處理,用來把結果集對映成你想要的結果;
-
T query(String sql, ResultSetHandler<T> rh, Object… params):執行查詢,引數sql為要執行的查詢語句模板,rh是結果集處理,用來把結果集對映成你想要的結果,params是sql語句的引數;
-
int update(String sql):執行增、刪、改語句,引數sql是要執行的SQL語句;
-
int update(Stringsql, Object param):執行增、刪、改語句,引數sql是要執行的SQL語句,引數param是引數(一個引數);
- int update(String sql, Object… params):執行增、刪、改語句,引數sql是要執行的SQL語句,引數params是引數(多個引數);
- @Test
- publicvoid testUpdate() throws SQLException {
- String sql = "insert into user_info(uid,uname,phonenumber,region,address,postcode) values(?,?,?,?,?,?)";
- Object[] params = {"0001","xiaoming","12345678912","China","Beijing","123456"};
- QueryRunner q = new TxQueryRunner();
- q.update(sql,params);
- }
- @Test
- publicvoid testUpdate2() throws SQLException {
- try{
- JdbcUtils.beginTransaction();
- String sql = "insert into user_info(uid,uname,phonenumber,region,address,postcode) values(?,?,?,?,?,?)";
- Object[] params1 = {"0002","xiaoming","12345678912","China","Beijing","123456"};
- Object[] params2 = {"0003","xiaoming","12345678912","China","Beijing","123456"};
- QueryRunner q = new TxQueryRunner();
- q.update(sql,params1);
- q.update(sql,params2);
- JdbcUtils.commitTransaction();
- }catch(Exception e){
- try{
- JdbcUtils.rollbackTransaction();
- }catch(SQLException ee){
- }
- }
- }
- //單行結果集,BeanHandler
- @Test
- publicvoid testQuery() throws SQLException{
- String sql = "select * from user_info where uid = ?";
- QueryRunner q = new TxQueryRunner();
- User u = q.query(sql, new BeanHandler<User>(User.class),"0001");
- System.out.println(u);
- }
- //多行結果集,BeanListHandler
- @Test
- publicvoid testQuery2() throws SQLException{
- String sql = "select * from user_info";
- QueryRunner q = new TxQueryRunner();
- List<User> list_u = q.query(sql, new BeanListHandler<User>(User.class));
- System.out.println(list_u);
- }
- //單行結果集,map
- @Test
- publicvoid testQuery3() throws SQLException{
- String sql = "select * from user_info where uid = ?";
- QueryRunner q = new TxQueryRunner();
- Map<String,Object> map_u = q.query(sql, new MapHandler(),"0001");
- System.out.println(map_u);
- }
- //多行結果集,List<map>
- @Test
- publicvoid testQuery4() throws SQLException{
- String sql = "select * from user_info";
- QueryRunner q = new TxQueryRunner();
- List<Map<String,Object>> list_map_u = q.query(sql, new MapListHandler());
- System.out.println(list_map_u);
- }
- //單行單列,ScalarHandler
- @Test
- publicvoid testQuery5() throws SQLException{
- String sql = "select count(*) from user_info";
- QueryRunner q = new TxQueryRunner();
- Object obj = q.query(sql, new ScalarHandler());
- //select count(*)的結果強轉成Number
- Number n = (Number)obj;
- System.out.println(n.longValue());
- }
正文:JAVA中DBUtils的QueryRunner類實現增刪改查詳解
一.QueryRunner類實現增刪改
public static void main(String[] args) throws Exception{ //使用自己的工具類,獲取資料庫的連線物件
Connection conn = MyJDBCUtils.getConnection(); //建立QueryRunner類物件
QueryRunner qr = new QueryRunner();
String sql = "UPDATE gjp_ledger set money=? , ldesc=? where lid=?";
Object[] params = {998,"買鑽石",3};
int result = qr.update(conn, sql, params);
System.out.println(result); DbUtils.close(conn);
}
二.QueryRunner類獲取查詢結果集ResultSetHandler
1.常用Handler * ArrayHandler 將結果集第一行轉成物件陣列
public static void main(String[] args) throws Exception{
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger where lid=?"; //結果集處理方式,ArrayHandler 第一行轉成物件陣列
QueryRunner qr = new QueryRunner();
Object[] objects = qr.query(conn, sql, new ArrayHandler(),3);
for(Object obj : objects){
System.out.println(obj);
}
}
* ArrayListHandler 將結果集中的每一行資料都轉成一個物件陣列,再將轉成的多個物件陣列存放到List中
public static void main(String[] args) throws Exception{
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger";
QueryRunner qr = new QueryRunner();
//執行query方法,傳遞連線物件,SQL語句,結果集處理方式ArrayListHandler
List<Object[]> list = qr.query(conn, sql, new ArrayListHandler());
for(Object[] objects : list)
{ for(Object obj : objects){
System.out.print(obj+" ");
}
System.out.println();
}
}
* BeanHandler 將結果集第一行資料封裝到一個對應的業務類例項中 (1): 定義業務資料類Ledger(實體類,javaBean)
public class Ledger {
//要生成空參、有參構造、set和get方法、toString方法
private int lid;
private String parent;
private double money;
private int sid;
private String account;
private String createtime;
private String ldesc;
}
(2)測試案例程式碼
public static void main(String[] args) throws Exception{
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger";
QueryRunner qr = new QueryRunner();
//BeanHandler泛型 ,構造方法(和反射有關係的物件)
Ledger legder = qr.query(conn, sql, new BeanHandler<Ledger>(Ledger.class));
System.out.println(legder);
}
* BeanListHandler 將結果集中的每一行資料都封裝到一個對應的業務類例項中,再將多個業務類例項物件存放到List裡。
public static void main(String[] args) throws Exception {
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger";
//結果集處理方式,BeanListHandler 每一行資料封裝到業務資料類中
QueryRunner qr = new QueryRunner();
List<Ledger> list = qr.query(conn, sql, new BeanListHandler<Ledger>(Ledger.class));
for(Ledger ledger : list)
{
System.out.println(ledger);
}
}
* MapHandler 將結果集中的第一行資料封裝到一個Map中,key是列名,value是對應的值。
public static void main(String[] args) throws Exception {
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger";
//結果集處理方式,MapHandler 封裝到一個Map集合中,儲存鍵值對集合
QueryRunner qr = new QueryRunner();
Map<String,Object> map = qr.query(conn, sql,new MapHandler());
for(String key : map.keySet()){
System.out.println(key+" "+map.get(key));
}
}
* MapListHandler 將結果集中的每一行資料都封裝到一個Map裡,然後再將多個Map存放到List
public static void main(String[] args) throws Exception{
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger";
//結果集處理方式,MapListHandler 資料中的每一行封裝成Map集合,多個Map集合儲存到List集合
QueryRunner qr = new QueryRunner();
List<Map<String,Object>> list = qr.query(conn, sql,new MapListHandler());
for(Map<String,Object> map : list){
for(String key : map.keySet()){
System.out.print(key+" "+map.get(key));
}
System.out.println();
}
}
* ColumnListHandler 將結果集中某一列的資料存放到List中
public static void main(String[] args)throws Exception {
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger";
//結果集處理方式,ColumnListHandler 資料中一個列,資料儲存到List集合
QueryRunner qr = new QueryRunner(); //ColumnListHandler構造方法中,寫字串列名
List<Double> list = qr.query(conn, sql,new ColumnListHandler<Double>("money"));
for(Double money : list){ System.out.println(money);
}
}
* ScalarHandler 進行單值查詢,如:select count(*) from
public static void main(String[] args) throws Exception{
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT count(*)as count FROM gjp_ledger"; //結果集處理方式,ScalarHandler 滿足只有1列,1個數據
QueryRunner qr = new QueryRunner(); //ColumnListHandler構造方法中,寫字串列名
Long i = qr.query(conn, sql, new ScalarHandler<Long>("count"));
System.out.println(i);
}
* KeyedHandler將結果集中的每一行資料都封裝為一個Map(List<Map>),再將這些Map再存到一個Map裡,其key為KeyedHandler指定的列,如果沒有指定則使用第一個查詢的欄位。
public static void main(String[] args) throws Exception{
Connection conn = MyJDBCUtils.getConnection();
String sql = "SELECT * FROM gjp_ledger"; //結果集處理方式,KeyedHandler
QueryRunner qr = new QueryRunner();
Map <String,Map<String,Object>> map= qr.query(conn, sql, new KeyedHandler<String>("lid"));
System.out.println(map);
}