原方法:
ZSGC.java
package com.hbsi.yuan; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.junit.Test; import com.hbsi.util.DBManager_c3p0; public class ZSGC { @Test public void insert(){ Connection conn = null; PreparedStatement st = null; try{ conn = DBManager_c3p0.getConnection(); String sql ="insert into admin(id,name,pass)values(?,?,?)"; st = conn.prepareStatement(sql); st.setInt(1,13); st.setString(2,"aa"); st.setString(3,"aaa"); st.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ DBManager_c3p0.closeDB(conn, st, null); } } @Test public void update(){ Connection conn = null; PreparedStatement st = null; try{ conn = DBManager_c3p0.getConnection(); String sql ="update admin set name=?,pass=? where id=?"; st = conn.prepareStatement(sql); st.setString(1,"bb"); st.setString(2,"bbb"); st.setInt(3,13); st.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ DBManager_c3p0.closeDB(conn, st, null); } } @Test public void delete(){ Connection conn = null; PreparedStatement st = null; try{ conn = DBManager_c3p0.getConnection(); String sql ="delete from admin where id=?"; st = conn.prepareStatement(sql); st.setInt(1,13); st.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ DBManager_c3p0.closeDB(conn, st, null); } } @Test public void find(){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = DBManager_c3p0.getConnection(); String sql ="select id,name,pass,sex,role from admin where id=?"; st = conn.prepareStatement(sql); st.setInt(1,1); rs = st.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)); System.out.println(rs.getString(2)); System.out.println(rs.getString(3)); System.out.println(rs.getString(4)); System.out.println(rs.getInt(5)); } }catch(Exception e){ e.printStackTrace(); }finally{ DBManager_c3p0.closeDB(conn, st, null); } } }
增加
修改
删除
查询
使用元数据简化代码:
util下新建ResultSetHandler接口
ResultSetHandler.java
package com.hbsi.util; import java.sql.ResultSet; public interface ResultSetHandler { public Object handler(ResultSet rs); }
单行封装到一个bean对象里,多行,封装到list集合中
写好处理器
BeanHandler.java
package com.hbsi.util; import java.lang.reflect.Field; import java.sql.ResultSet; import java.sql.ResultSetMetaData; public class BeanHandler implements ResultSetHandler{ //代表bin private Class clazz; public BeanHandler(Class clazz){ this.clazz = clazz; } public Object handler(ResultSet rs) { //要把结果集封装到bean中 try{ if(!rs.next()){ return null; } //获取bean对象 Object bean = clazz.newInstance(); //并不知道有哪些字段,结果集的元数据 ResultSetMetaData meta = rs.getMetaData(); //用元数据获取,获得列数 int count = meta.getColumnCount(); //通过循环把bean的值和字段名取到 for(int i=0;i<count;i++){ //得到结果集中地每列字段名 String columnName = meta.getColumnName(i+1); //按名字走,获取对应值 Object value= rs.getObject(columnName); //反射bean上与列名相对应得属性 Field f = bean.getClass().getDeclaredField(columnName); //权限 f.setAccessible(true); f.set(bean, value); } return bean; }catch(Exception e){ throw new RuntimeException(e); } } }
DBManager_c3p0.java
package com.hbsi.util; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; import com.mysql.jdbc.Statement; public class DBManager_c3p0 { private static ComboPooledDataSource ds = null; static{ try{ //创建连接池 ds = new ComboPooledDataSource("mysql"); }catch(Exception e){ e.printStackTrace(); } } public static Connection getConnection() throws SQLException{ return ds.getConnection(); } public static void closeDB(Connection con,PreparedStatement ps,ResultSet rs){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //优化CUD操作 public static void update(String sql,Object[] params){ Connection conn = null; PreparedStatement st = null; try{ conn = DBManager_c3p0.getConnection(); st = conn.prepareStatement(sql); for(int i=0;i<params.length;i++){ st.setObject(i+1, params[i]); } st.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ DBManager_c3p0.closeDB(conn, st, null); } } // public static Object query(String sql,Object[] params, ResultSetHandler h){ Connection conn = null; PreparedStatement st = null; ResultSet rs = null; try{ conn = DBManager_c3p0.getConnection(); st = conn.prepareStatement(sql); for(int i=0;i<params.length;i++){ st.setObject(i+1, params[i]); } rs = st.executeQuery(); return h.handler(rs); }catch(Exception e){ throw new RuntimeException(e); }finally{ DBManager_c3p0.closeDB(conn, st, rs); } } }
Admin,java
package www.hbsi.domain; import java.io.Serializable; /** * 把一个表admin映射(mapping)成Class类 * * @author redarmy * */ //可序列化的接口 public class Admin implements Serializable { private static final long serialVersionUID = 1L; // 把admin表中的字段映射成Admin类的成员属性(字段类型的转换如下 int --int Integer,varchar--String ) private int id; private String name; private String pass; private String sex; private int role; public Admin(int id, String name, String pass, String sex, int role) { super(); this.id = id; this.name = name; this.pass = pass; this.sex = sex; this.role = role; } //构造器 public Admin() { super(); // TODO Auto-generated constructor stub } public Admin(String name, String pass, String sex, int role) { super(); this.name = name; this.pass = pass; this.sex = sex; this.role = role; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getRole() { return role; } public void setRole(int role) { this.role = role; } @Override public String toString() { return "Admin [id=" + id + ", name=" + name + ", pass=" + pass + ", role=" + role + ", sex=" + sex + "]"; } }
YouHuaZSGC.java
package com.hbsi.yuan; import org.junit.Test; import www.hbsi.domain.Admin; import com.hbsi.util.BeanHandler; import com.hbsi.util.DBManager_c3p0; public class YouHuaZSGC { @Test public void insert(){ String sql ="insert into admin(id,name,pass)values(?,?,?)"; Object[] params ={13,"abc","abc"}; DBManager_c3p0.update(sql, params); } @Test public void update(){ String sql ="update admin set name=?,pass=? where id=?"; Object[] params ={"xxx","xxxx",13}; DBManager_c3p0.update(sql, params); } @Test public void delete(){ String sql ="delete from admin where id=?"; Object[] params ={13}; DBManager_c3p0.update(sql, params); } @Test public void find(){ //单行封装到一个bean对象里,多行,封装到list集合中 String sql ="select id,name,pass from admin where id=?"; Object[] params ={4}; Admin users = (Admin) DBManager_c3p0.query(sql, params, new BeanHandler(Admin.class)); System.out.println(users.getId()+":"+users.getName()+":"+users.getPass()); } }
增加
修改
删除
查找
查询所有:
BeanListHandler.java
package com.hbsi.util; import java.lang.reflect.Field; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; public class BeanListHandler implements ResultSetHandler { private Class clazz; public BeanListHandler(Class clazz) { super(); this.clazz = clazz; } public Object handler(ResultSet rs) { try{ List list = new ArrayList(); while(rs.next()){ Object bean = clazz.newInstance(); ResultSetMetaData meta = rs.getMetaData(); int count = meta.getColumnCount(); for(int i=0;i<count;i++){ String columnName = meta.getColumnName(i+1); Object value= rs.getObject(columnName); Field f = bean.getClass().getDeclaredField(columnName); f.setAccessible(true); f.set(bean, value); } list.add(bean); } return list; }catch(Exception e){ throw new RuntimeException(e); } } }
package com.hbsi.yuan; import java.util.List; import org.junit.Test; import com.hbsi.domain.Admin; import com.hbsi.util.BeanHandler; import com.hbsi.util.BeanListHandler; import com.hbsi.util.DBManager_c3p0; public class YouHuaZSGC { @Test public void findAll(){ //单行封装到一个bean对象里,多行,封装到list集合中 String sql ="select id,name,pass,sex,role from admin"; Object[] params ={}; List<Admin> list = (List<Admin>) DBManager_c3p0.query(sql, params, new BeanListHandler(Admin.class)); for(Admin admins:list){ System.out.println(admins.getId()+"--"+admins.getName()+"--"+admins.getPass()); } System.out.println(list.size()); } }