zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    KVM_虚拟化技术
    Java面试题全集
    Web负载均衡与分布式架构
    Tomcat的目录结构和配置文件详解
    Apache HTTP Server 与 Tomcat 的三种连接方式介绍
    Java文件上传
    基础知识《十一》Java异常处理总结
    《转载》renameTo文件在windows环境下可以,在linux中报错
    《转载》Linux服务之搭建FTP服务器&&分布式文件服务器的比较
    oracle闪回数据
  • 原文地址:https://www.cnblogs.com/evilliu/p/8473864.html
Copyright © 2011-2022 走看看