JDBC 使用common-dbutiles

一:第三方jar mysql-connector-java-5.1.45-bin.jar,需要关注的核心类:

1、DbUtils----操作数据库的连接注册和释放。

2:、QueryRunner---对数据库进行操作的类,比如增删改查等。

3、ResultSetHandler--- 对查询结果集的处理的核心类。

代码:

 1 package mysql_comm_demo;
 2 
 3 import Jdbc_Test.jdbcutils;
 4 import org.apache.commons.dbutils.DbUtils;
 5 import org.apache.commons.dbutils.QueryRunner;
 6 
 7 import java.sql.Connection;
 8 import java.sql.SQLException;
 9 
10 public class comm_test {
11 
12     public  static  void main(String ...args)throws SQLException{
13         db_Test.con_mysql();
14     }
15 }
16 class db_Test{
17     private  static final Connection con= jdbcutils.getCon();
18       static void con_mysql() throws SQLException{
19           /*
20           用QueryRunner来进行操作数据库。sql用字符串占位符,在使用调用queryrunner的update(Connection con,String sql,Object ...para)
21           根据动态传入的para  替换sql中占位符,其中para可以是数组进行操作。
22            */
23         QueryRunner op_my=new QueryRunner();
24         String sql="insert into   system_user (nid,username,password) values(?,?,?)";
25         Object[]  info={14,"oop","123"};
26         int row=op_my.update(con,sql,info);
27         DbUtils.closeQuietly(con);
28         /*
29         通过判断row的大小,来判断执行是否成功。
30          */
31         if(row>0){
32             System.out.print(String.format("执行信息如下:%s","执行成功!" ));
33         }
34     }
35 
36     }

 二:结果集处理:

ResultSetHandler:

四种方法:1、ArrayHandler:获取查询的结果第一个结果。

                 2、ArrayListHandler:获取查询结果所有结果的数组的list集合。

                 3、BeanHandler:获取查询结果的中的第一个javabean的对象。

                 4、BeanListHandler:获取查询结果的所有的javabean的集合。

     5、MapHandler:获取查询第一个结果,并是Map类型,Map<String,Object>因为列名称的类型是String而列的具体类型未知。

                 6、MapListHandler:获取查询的结果集,是一个List集合,集合的类型为:Map<String,Object>

其中方法2和4是比较重要。

javabean:

               是一个java特有的数据类型,把数据封装成对象,需要有以下特点:

               1、要有空参数的构造方法。

              2、要有getXxx和setXxxx方法。

 1 package mysql_comm_demo;
 2 
 3 public class Sys_User {
 4     /*
 5     javabean:
 6     1、需要有空参数的构造器。
 7     2、有getxxx和setxx方法。
 8      */
 9     public  Sys_User(){};
10     private int nid;
11     private String  username;
12     private  String  password;
13     /*
14     需要注意的时候get或者set 后面的字段首字母大写。
15      */
16     public int getNid(){
17         return this.nid;
18     }
19     public int setNid(int nid){
20         this.nid=nid;
21         return this.nid;
22     }
23     public  String getUsername(){
24         return this.username;
25     }
26     public  void  setUsername(String user){
27         this.username=user;
28     }
29     public   String  getPassword(){
30         return this.password;
31     }
32     public  void   setPassword(String password){
33         this.password=password;
34     }
35 
36     @Override
37     public String toString() {
38         return  this.nid+"  "+this.username+"  "+this.password;
39     }
40 }
  1 package mysql_comm_demo;
  2 
  3 
  4 import Jdbc_Test.*;
  5 import org.apache.commons.dbutils.QueryRunner;
  6 import org.apache.commons.dbutils.handlers.*;
  7 
  8 
  9 import java.sql.Array;
 10 import java.sql.Connection;
 11 
 12 import java.sql.SQLException;
 13 import java.util.Collection;
 14 import java.util.List;
 15 import java.util.Map;
 16 
 17 
 18 public class comm_Res {
 19     public static  void  main(String ... args)throws SQLException{
 20         //select_My.ex_Han();
 21         //select_My.ex_Arlist();
 22         //select_My.ex_Beahan();
 23         //select_My.ex_Bean_List();
 24         //select_My.co_List();
 25         //select_My.sca_H();
 26         select_My.m_H();
 27         //select_My.m_Lh();
 28     }
 29 }
 30 
 31 
 32 class select_My{
 33     private  static  final  Connection con=jdbcutils.getCon();
 34     private  static final   String sql="SELECT * FROM system_user ";
 35         static void  ex_Han()throws SQLException{
 36         QueryRunner  qr=new QueryRunner();
 37         /*
 38             通过queryrunner调用query方法,对数据库进行查询。
 39             <T> T     query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params)
 40             该方法返回是泛型。类型不确定由处理结果集ResultSetHandler<T>来确定该方法返回的类型。
 41             ResultSetHandler<T>是接口,改参数传递是实现该接口的实现类。ArrayHandler或者ArrayHandelerList等。
 42             String sql:查询的sql语句用? 占位。
 43             Object... params:sql语句的替代参数。
 44             ArrayHandler:单个数组集。
 45             ArrayHandelerList:是数组级套数组集。
 46 
 47             第一种方法:
 48             ArrayHandler 方法返回查询结果的第一个列的数组对象。无论你查询多少个结果,只返回第一个结果。
 49             ResultSetHandler implementation that converts a ResultSet into an Object[]. This class is thread safe.
 50             数据格式:['root',123]
 51          */
 52         ArrayHandler ah=new ArrayHandler();
 53         Object[] obj=qr.query(con,sql,ah);
 54         for(Object i:obj){
 55             System.out.print(i);
 56         }
 57     }
 58     static  void  ex_Arlist()throws SQLException{
 59             /*
 60             第二种: ArrayListHandler
 61             返回查询结果的数组集的List集合
 62             数据形式:[Objects[]]
 63              */
 64         QueryRunner qr=new QueryRunner();//执行数据平台。
 65         ArrayListHandler arl =new ArrayListHandler();
 66         List<Object[]> res=qr.query(con,sql,arl);
 67         if(res.size()!=0){
 68         for(Object[] obj:res){
 69             for (Object i:obj){
 70                 System.out.print(i+"	");
 71             }
 72             System.out.print("
");
 73         }
 74         }
 75 
 76     }
 77     static  void  ex_Beahan()throws SQLException{
 78             /*
 79             第三种方法是:JAVABEAN
 80             返回查询结果的第一行的数据的javabean对象。
 81             构造方法:
 82             BeanHandler(Class<? extends T> type)
 83             参数:传入具有JAVABEAN的特点的class文件。
 84             参数格式:classname.class
 85             返回类型为:classname
 86              */
 87             QueryRunner qr=new QueryRunner();
 88             BeanHandler<Sys_User> beh=new BeanHandler<>(Sys_User.class);//注意beanhandler是泛型类Class BeanHandler<T>
 89             Sys_User  sys=qr.query(con,sql,beh);
 90             System.out.print(sys);
 91     }
 92     static void  ex_Bean_List() throws  SQLException{
 93             /*
 94             第三种方法:Class BeanListHandler<T>
 95             ResultSetHandler implementation that converts a ResultSet into a List of beans. This class is thread safe.
 96             参数和上面一致。
 97             返回值:List集合的classname object集合。
 98              */
 99             QueryRunner qr=new QueryRunner();
100             BeanListHandler<Sys_User>  bl=new BeanListHandler<>(Sys_User.class);
101             List<Sys_User> sys=qr.query(con,sql,bl);
102             for(Sys_User s:sys){
103                 System.out.println(s);
104             }
105     }
106     static  void  co_List() throws SQLException{
107             /*
108             方法:ColumnListHandler  指定返回指定列的值。
109             构造器:分无参数和有参数
110             无参数:默认返回的是第一列的值。
111             有参数:可以指定传入列的名字(字符串),指定返回列的值,由于不确定类型,所以在返回结果的时候,
112             使用List<Object>形式。
113              */
114         ColumnListHandler<Object[]> col=new ColumnListHandler<>("username");
115         QueryRunner qr=new QueryRunner();
116         List<Object[]> qr_obj=qr.query(con,sql,col);
117         System.out.print(qr_obj);
118     }
119     static  void  sca_H()throws  SQLException{
120             /*
121             方法:ScalarHandler
122             该方法返回单一数据。所以在查询单一数据的时候可以用这个。比如说查执行语句的条数。
123             空参构造方法。
124             如果清楚返回类型可以进行指定。
125             参数构造方法也可以指定列的名字,需要字符串。返回只是一个数据而不是一个集合。
126             ResultSetHandler implementation that converts one ResultSet column into an Object. This class is thread safe.
127              */
128         String sql="select count(*) from system_user";
129         ScalarHandler<Object> sc=new ScalarHandler<>();
130         QueryRunner qr=new QueryRunner();
131         Object  obj=qr.query(con,sql,sc);
132         System.out.print(obj);
133     }
134     static  void  m_H()throws  SQLException{
135             /*
136             方法:MapHandler 返回的是单个map类型,只返回当前结果的第一个。
          ResultSetHandler implementation that converts a ResultSet into a List of Maps. This class is thread safe.
137 注意返回的类型是:Map<String,Object> 因为key是列的名字。 138 而列的类型不确定所以是Object 139 */ 140 MapHandler mh=new MapHandler(); 141 QueryRunner qr=new QueryRunner(); 142 Map<String,Object> ma=qr.query(con,sql,mh); 143 System.out.print(ma.values()); 144 System.out.print(ma.keySet()); 145 } 146 static void m_Lh()throws SQLException{ 147 /* 148 方法:MapHandler 返回的是单个map类型,返回的是所有的列(map)的List集合。 149 ResultSetHandler implementation that converts a ResultSet into a List of Maps. This class is thread safe. 150 注意返回的类型是:Map<String,Object> 因为key是列的名字。 151 而列的类型不确定所以是Object 152 */ 153 MapListHandler ml=new MapListHandler(); 154 QueryRunner qr=new QueryRunner(); 155 List<Map<String,Object>> rest=qr.query(con,sql,ml); 156 for(Map<String,Object> obj:rest){ 157 Collection<Object> val=obj.values(); 158 for(Object a: val){ 159 System.out.print(a+" "); 160 } 161 System.out.print(" "); 162 } 163 } 164 }

 Jdbcutils工具类:

 1 package Jdbc_Test;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.sql.Connection;
 6 import java.sql.DriverManager;
 7 import java.sql.ResultSet;
 8 import java.sql.Statement;
 9 import java.util.Properties;
10 
11 public class jdbcutils {
12     private jdbcutils(){};
13     private static  Connection con;
14     public  static  void  main(String[] args)throws IOException{
15 
16 
17     }
18     public  static Connection getCon(){
19         /*
20         通过读取properites配置文件来获取数据库连接信息。
21         通过类加载器,读取当前父目录的配置文件。通过class.getClassLoader方法getResourceAstream获取配置文件的
22         内容,然后通过IO流处理properites文件获取对应的key值。
23         配置文件便于灵活配置数据库信息。
24          */
25         InputStream inp=jdbcutils.class.getClassLoader().getResourceAsStream("database.properties");
26         Properties  pro=new Properties();
27         try {
28             pro.load(inp);
29         }catch (Exception ex){
30             throw new  RuntimeException(ex+"读取配置文件失败!");
31         }
32         try {
33             String Drverclass = pro.getProperty("Driver.class");
34             String url = pro.getProperty("Url");
35             String username = pro.getProperty("username");
36             String password = pro.getProperty("password");
37             Class.forName(Drverclass);
38             con = DriverManager.getConnection(url, username, password);
39         }catch (Exception ex){
40             throw  new RuntimeException(ex+"数据库连接失败!");
41         }
42         return con;
43     }
44     public  static void cls_re(Connection con, Statement sta, ResultSet re){
45         if(con!=null){
46             try{
47                 con.close();
48             }catch (Exception ex){}
49         }
50         if(sta!=null){
51             try{
52                 sta.close();
53             }catch (Exception ex){}
54         }
55         if(re!=null){
56             try{
57                 re.close();
58             }catch (Exception ex){}
59         }
60 
61     }
62     public  static void cls_re(Connection con, Statement sta){
63         if(con!=null){
64             try{
65                 con.close();
66             }catch (Exception ex){}
67         }
68         if(sta!=null){
69             try{
70                 sta.close();
71             }catch (Exception ex){}
72         }
73 
74     }
75 }
原文地址:https://www.cnblogs.com/evilliu/p/8473864.html