一:第三方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 aResultSet
into aList
ofMap
s. 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 }