(十八)JDBC优化使用(一)

一、将增删改方法合并,优化代码

  • 第十七篇的UserPOImpl.java类代码可以进行优化,因为增删改方法用的都是同一种执行方法executeUpdate(),对十七篇的例子进行优化如下:

2.1  搭建实验环境

    A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。

    B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):

 

   2.2  创建一个web工程,并导入数据库驱动包。

 

  2.3  编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。

UserPO.java

package po;

public class UserPO {
	private String userName;
	private String passWd;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWd() {
		return passWd;
	}
	public void setPassWd(String passWd) {
		this.passWd = passWd;
	}
	
}

 解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。

 

  2.4  创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。

  • UserPOI.java
     1 package dao;
     2 
     3 import java.util.List;
     4 
     5 import po.UserPO;
     6 
     7 public interface UserPOI {
     8     public boolean addUser(UserPO user);    //
     9     public boolean delUser(String userName);    //
    10     public boolean uptUser(UserPO user);    //修改
    11     public List<UserPO>  gets();    //
    12     }    

     

  •  UserPOImpl.java()
  1 package dao;
  2 
  3 
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.ResultSet;
  7 import java.sql.Statement;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 
 11 import po.UserPO;
 12 
 13 public class userPOImpl implements UserPOI {
 14 
 15     public boolean addUser(UserPO user) {  //增加
 16         
 17         String sql="insert into user values('"+user.getUserName()+"','"+user.getPassWd()+"') ";
 18         return cud(sql);
 19     }
 20     
 21     public boolean delUser(String userName) {    //删除
 22         
 23         String sql="delete from user where userName='"+userName+"'";
 24     
 25         return cud(sql);
 26     }
 27 
 28 
 29     public boolean uptUser(UserPO user){    //修改
 30         String sql="update user set passWd='"+user.getPassWd()+"'where userName='"+user.getUserName()+"'";
 31         return cud(sql);
 32     }
 33     
 34     public List<UserPO> gets() {    //查找全部
 35         List<UserPO> list=new ArrayList<UserPO>();
 36         Connection conn=null;
 37         Statement stat=null;
 38         ResultSet res=null;
 39         try {
 40             Class.forName("com.mysql.jdbc.Driver");
 41             conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
 42             stat=conn.createStatement();
 43             res=stat.executeQuery("select * from user");
 44             while(res.next()){        //不能是if
 45                 UserPO  user=new UserPO();
 46                 user.setUserName(res.getString("userName"));
 47                 user.setPassWd(res.getString("passWd"));
 48                 list.add(user);
 49             
 50             }
 51             
 52         } catch (Exception e) {
 53             
 54             e.printStackTrace();
 55         }finally{
 56             try{
 57                 if(conn!=null && !conn.isClosed()){
 58                     conn.close();
 59                 }
 60                 if(stat!=null && stat.isClosed()){
 61                     stat.close();
 62                 }
 63                 if(res!=null && res.isClosed()){
 64                     res.close();
 65                 }
 66             }catch(Exception e){
 67                 e.printStackTrace();
 68             }
 69             
 70             
 71         }
 72 
 73         return list;
 74     }
 75 
 76 
 77     public boolean cud(String sql){        //增删改方法合并
 78         boolean flag=false;
 79         Connection conn=null;
 80         Statement stat=null;
 81         final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
 82         final String USER="root";
 83         final String PASSWORD="";
 84         
 85         try{
 86             Class.forName("com.mysql.jdbc.Driver");
 87             conn=DriverManager.getConnection(URL,USER,PASSWORD);
 88             stat=conn.createStatement();
 89             
 90             int res=stat.executeUpdate(sql);
 91             flag=(res>0)?true:false;
 92             
 93         }catch(Exception e){
 94             e.printStackTrace();
 95         }finally{
 96             try{
 97                 if(conn!=null && !conn.isClosed()){
 98                     conn.close();
 99                 }
100                 if(stat!=null && !stat.isClosed()){
101                     stat.close();
102                 }
103             }catch(Exception e){
104                 e.printStackTrace();
105             }
106         }
107             
108         
109         return flag;
110     }
111      
112 }

 

   解析:  把增删改方法合并为cud方法,使代码更简便。

  2.5  创建测试类进行测试。

  • UserTest.java
 1 package test;
 2 
 3 import java.util.List;
 4 
 5 import org.junit.Test;
 6 
 7 import dao.userPOImpl;
 8 import po.UserPO;
 9 
10 public class UserTest {
11     @Test
12     public void UserPOTest(){
13         userPOImpl im=new userPOImpl();
14         
15         UserPO user=new UserPO();
16         user.setUserName("张三");
17         user.setPassWd("123");
18         im.addUser(user);
19     }
20     
21     @Test
22     public void userPOget(){
23         userPOImpl im=new userPOImpl();
24         List<UserPO> list=im.gets();
25         for(int i=0;i<list.size();i++)
26             System.out.println(list.get(i).getUserName());
27         
28     }
29     
30     @Test
31     public void delUserTest(){
32         userPOImpl im=new userPOImpl();
33         im.delUser("张三");
34     }
35     @Test
36     public void uptUserTest(){
37         userPOImpl im=new userPOImpl();
38         UserPO user=new UserPO();
39         user.setUserName("张三");
40         user.setPassWd("456");
41         im.uptUser(user);
42     }
43 }

 

 




 二、使用预处理prepareStatement语句优化

   2.1  编写javabean

UserPO.java

package po;

public class UserPO {
	private String userName;
	private String passWd;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWd() {
		return passWd;
	}
	public void setPassWd(String passWd) {
		this.passWd = passWd;
	}
	
}

 

  2.2  创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类。

  • UserPOI.java
 1 package dao;
 2 
 3 import java.util.List;
 4 
 5 import po.UserPO;
 6 
 7 public interface UserPOI {
 8     public boolean addUser(UserPO user);    // 9     public boolean delUser(String userName);    //10     public boolean uptUser(UserPO user);    //修改
11     public List<UserPO>  gets();    //12     }    

 

  • 一般我们专门编写一个DBUtil工具类,以实现数据库的各种操作方法:

 

 DButils.java

 1 package dao;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.Statement;
 7 import java.util.List;
 8 
 9 public class DButils {
10     public static boolean cud(String sql,List<Object> list){        //增删改方法合并
11         boolean flag=false;
12         Connection conn=null;
13         PreparedStatement stat=null;
14         final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
15         final String USER="root";
16         final String PASSWORD="";
17         
18         try{
19             Class.forName("com.mysql.jdbc.Driver");
20             conn=DriverManager.getConnection(URL,USER,PASSWORD);
21             stat=conn.prepareStatement(sql);    //对sql语句进行预处理
22             
23             if(list!=null){    
24                 for(int i=0;i<list.size();i++){    //对list中存放的?里的值循环,并对sql中的?赋值
25                     stat.setObject(i+1, list.get(i));
26                 }
27             }
28             
29             int res=stat.executeUpdate();    //执行预处理语句指令
30             flag=(res>0)?true:false;
31             
32         }catch(Exception e){
33             e.printStackTrace();
34         }finally{
35             try{
36                 if(conn!=null && !conn.isClosed()){
37                     conn.close();
38                 }
39                 if(stat!=null && !stat.isClosed()){
40                     stat.close();
41                 }
42             }catch(Exception e){
43                 e.printStackTrace();
44             }
45         }
46             
47         
48         return flag;
49     }
50 }

 

  • 编写实现类(UserPOImpl.java)
 1 package dao;
 2 
 3 
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.ResultSet;
 7 import java.sql.Statement;
 8 import java.util.ArrayList;
 9 import java.util.List;
10 
11 import po.UserPO;
12 
13 public class userPOImpl implements UserPOI {
14 
15     public boolean addUser(UserPO user) {  //增加
16         
17         String sql="insert into user values(?,?)";
18         List<Object> list=new ArrayList<Object>();
19         list.add(user.getUserName());
20         list.add(user.getPassWd());
21         return DButils.cud(sql,list);
22     }
23     
24     public boolean delUser(String userName) {    //删除
25         
26         String sql="delete from user where userName=?";
27         List<Object> list=new ArrayList<Object>();
28         list.add(userName);
29         return DButils.cud(sql,list);
30     }
31 
32 
33     public boolean uptUser(UserPO user){    //修改
34         String sql="update user set passWd=? where userName=?";
35         List<Object> list=new ArrayList<Object>();
36         list.add(user.getPassWd());
37         list.add(user.getUserName());
38         return DButils.cud(sql,list);
39     
40     }
41     
42     public List<UserPO> gets() {    //查找全部
43         List<UserPO> list=new ArrayList<UserPO>();
44         Connection conn=null;
45         Statement stat=null;
46         ResultSet res=null;
47         try {
48             Class.forName("com.mysql.jdbc.Driver");
49             conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8", "root", "");
50             stat=conn.createStatement();
51             res=stat.executeQuery("select * from user");
52             while(res.next()){        //不能是if
53                 UserPO  user=new UserPO();
54                 user.setUserName(res.getString("userName"));
55                 user.setPassWd(res.getString("passWd"));
56                 list.add(user);
57             
58             }
59             
60         } catch (Exception e) {
61             
62             e.printStackTrace();
63         }finally{
64             try{
65                 if(conn!=null && !conn.isClosed()){
66                     conn.close();
67                 }
68                 if(stat!=null && stat.isClosed()){
69                     stat.close();
70                 }
71                 if(res!=null && res.isClosed()){
72                     res.close();
73                 }
74             }catch(Exception e){
75                 e.printStackTrace();
76             }
79         }
81         return list;
82     } 
88 }

 

  2.3  创建测试类进行测试。

  • UserTest.java
 1 package test;
 2 
 3 import java.util.List;
 4 
 5 import org.junit.Test;
 6 
 7 import dao.userPOImpl;
 8 import po.UserPO;
 9 
10 public class UserTest {
11     @Test
12     public void UserPOTest(){
13         userPOImpl im=new userPOImpl();
14         
15         UserPO user=new UserPO();
16         user.setUserName("张三");
17         user.setPassWd("123");
18         im.addUser(user);
19     }
20     
21     @Test
22     public void userPOget(){
23         userPOImpl im=new userPOImpl();
24         List<UserPO> list=im.gets();
25         for(int i=0;i<list.size();i++)
26             System.out.println(list.get(i).getUserName());
27         
28     }
29     
30     @Test
31     public void delUserTest(){
32         userPOImpl im=new userPOImpl();
33         im.delUser("张三");
34     }
35     @Test
36     public void uptUserTest(){
37         userPOImpl im=new userPOImpl();
38         UserPO user=new UserPO();
39         user.setUserName("张三");
40         user.setPassWd("456");
41         im.uptUser(user);
42     }
43 }
 
  • 本例中的DBUtils代码可以优化为:
 1 package dao;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.Statement;
 8 import java.util.List;
 9 
10 public class DButils {
11         
12     /**
13      * 单例模式
14      * 
15      */
16     public static Connection conn=null;
17     static{
18         /*
19          * 把常量和公用的放在static块里加载
20          * */
21         final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
22         final String USER="root";
23         final String PASSWORD="";
24         
25         try{
26             Class.forName("com.mysql.jdbc.Driver");
27             conn=DriverManager.getConnection(URL,USER,PASSWORD);
28         }catch(Exception e){
29             e.printStackTrace();
30         }
31         
32     }
33     
34     public static boolean cud(String sql,List<Object> list){        //增删改方法合并
35         boolean flag=false;
36         PreparedStatement stat=null;
37         try{
38             stat=conn.prepareStatement(sql);    //对sql语句进行预处理
39             
40             if(list!=null){    
41                 for(int i=0;i<list.size();i++){    //对list中存放的?里的值循环,并对sql中的?赋值
42                     stat.setObject(i+1, list.get(i));
43                 }
44             }
45             
46             int res=stat.executeUpdate();    //执行预处理语句指令
47             flag=(res>0)?true:false;
48             
49         }catch(Exception e){
50             e.printStackTrace();
51         }finally{
52             close(conn, stat, null);
53         }
54                 
55         return flag;
56     }
57     
58     /**
59      * 关闭流
60      * @param conn    数据库连接
61      * @param stat    预处理指令
62      * @param res    返回结果集
63      */
64     public static void close(Connection conn,PreparedStatement stat,ResultSet res){
65         try{
66             if(conn!=null && !conn.isClosed()){
67                 conn.close();
68             if(stat!=null && !stat.isClosed()){
69                 stat.close();
70             }
71             if(res!=null && !res.isClosed()){
72                 res.close();
73             }
74             }
75         }catch(Exception e){
76             e.printStackTrace();
77         }
78         
79         
80     }
81     
82 }

 

三、使用连接池优化jdbc

  • 上个例子的DBUtils可以优化为:
  1 package dao;
  2 
  3 import java.beans.PropertyVetoException;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.Statement;
  9 import java.util.List;
 10 
 11 import com.mchange.v2.c3p0.ComboPooledDataSource;
 12 
 13 public class DButils {
 14         
 15     /**
 16      * 连接池
 17      */
 18     static ComboPooledDataSource dateSource;
 19     static{
 20         dateSource=new ComboPooledDataSource();
 21         final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
 22         final String USER="root";
 23         final String PASSWORD="";
 24         final String DRIVER="com.mysql.jdbc.Driver";
 25         try {
 26             dateSource.setDriverClass(DRIVER);
 27             dateSource.setJdbcUrl(URL);
 28             dateSource.setUser(USER);
 29             dateSource.setPassword(PASSWORD);
 30             dateSource.setMaxPoolSize(100);
 31             dateSource.setMinPoolSize(10);
 32             dateSource.setMaxStatements(10000); 
 33         } catch (PropertyVetoException e) {
 34             e.printStackTrace();
 35         }
 36     }
 37     
 38     
 39     /**
 40      * 单例模式
 41      */
 42 //    public static Connection conn=null;
 43 //    static{
 44 //        /*
 45 //         * 把常量和公用的放在static块里加载
 46 //         * */
 47 //        final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
 48 //        final String USER="root";
 49 //        final String PASSWORD="";
 50 //        
 51 //        try{
 52 //            Class.forName("com.mysql.jdbc.Driver");
 53 //            conn=DriverManager.getConnection(URL,USER,PASSWORD);
 54 //        }catch(Exception e){
 55 //            e.printStackTrace();
 56 //        }
 57 //        
 58 //    }
 59     
 60     public static boolean cud(String sql,List<Object> list){        //增删改方法合并
 61         boolean flag=false;
 62         PreparedStatement stat=null;
 63         Connection conn=null;
 64         try{
 65             conn=dateSource.getConnection();
 66             stat=conn.prepareStatement(sql);    //对sql语句进行预处理
 67             
 68             if(list!=null){    
 69                 for(int i=0;i<list.size();i++){    //对list中存放的?里的值循环,并对sql中的?赋值
 70                     stat.setObject(i+1, list.get(i));
 71                 }
 72             }
 73             
 74             int res=stat.executeUpdate();    //执行预处理语句指令
 75             flag=(res>0)?true:false;
 76             
 77         }catch(Exception e){
 78             e.printStackTrace();
 79         }finally{
 80             close(conn, stat, null);
 81         }
 82                 
 83         return flag;
 84     }
 85     
 86     /**
 87      * 关闭流
 88      * @param conn    数据库连接
 89      * @param stat    预处理指令
 90      * @param res    返回结果集
 91      */
 92     public static void close(Connection conn,PreparedStatement stat,ResultSet res){
 93         try{
 94             if(conn!=null && !conn.isClosed()){
 95                 conn.close();
 96             if(stat!=null && !stat.isClosed()){
 97                 stat.close();
 98             }
 99             if(res!=null && !res.isClosed()){
100                 res.close();
101             }
102             }
103         }catch(Exception e){
104             e.printStackTrace();
105         }
106         
107         
108     }
109     
110 }
  • 使用C3P0连接池需要导入相应的jar包。

 



 

四、优化总结

4.1  搭建实验环境

    A. 启动mysql数据库,即开启mysql/bin/mysqld.exe。

    B. 创建数据库,并创建所需的表。如下图(在创建数据库和表的时候请对其编码设置为utf-8编码否则后期容易出错):

 

   4.2  创建一个web工程,并导入数据库驱动包。

 

  4.3  编写javabean,即PO对象又叫持久化对象,此对象的成员属性与数据库的列一一对应,本例中数据库与userName和passWd两列,则PO对象中也应该有这两个成员属性。

UserPO.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package po;
 
public class UserPO {
    private String userName;
    private String passWd;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassWd() {
        return passWd;
    }
    public void setPassWd(String passWd) {
        this.passWd = passWd;
    }
     
}

 解析: javabean对象中成员属性应该是private的,且必须要有get()和set()方法。

 

  4.4  创建DAO包,专门用于操作数据(即与数据库互动,进行增删改差操作),一般有接口类和实现类和工具类。

  • UserPOI.java
     1 package dao;
     2 
     3 import java.util.List;
     4 
     5 import po.UserPO;
     6 
     7 public interface UserPOI {
     8     public boolean addUser(UserPO user);    //
     9     public boolean delUser(String userName);    //
    10     public boolean uptUser(UserPO user);    //修改
    11     public List<UserPO>  gets();    //查全部
    12     public UserPO getByName(String userName); //按名字查人
    13     }    

     

  •  UserPOImpl.java()
 1 package dao;
 2 
 3 
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.ResultSet;
 7 import java.sql.Statement;
 8 import java.util.ArrayList;
 9 import java.util.List;
10 
11 import po.UserPO;
12 
13 public class userPOImpl implements UserPOI {
14 
15     public boolean addUser(UserPO user) {  //增加
16         
17         String sql="insert into user values(?,?)";
18         List<Object> list=new ArrayList<Object>();
19         list.add(user.getUserName());
20         list.add(user.getPassWd());
21         return DButils.cud(sql,list);
22     }
23     
24     public boolean delUser(String userName) {    //删除
25         
26         String sql="delete from user where userName=?";
27         List<Object> list=new ArrayList<Object>();
28         list.add(userName);
29         return DButils.cud(sql,list);
30     }
31 
32 
33     public boolean uptUser(UserPO user){    //修改
34         String sql="update user set passWd=? where userName=?";
35         List<Object> list=new ArrayList<Object>();
36         list.add(user.getPassWd());
37         list.add(user.getUserName());
38         return DButils.cud(sql,list);
39     
40     }
41     
42     public List<UserPO> gets() {    //查找全部
43     
44         String sql="select * from user";
45         return DButils.get(sql, null);
46     }
47 
48     public UserPO getByName(String userName){    //按名字找人
49         String sql="select * from user where userName=?";
50         List<Object> list=new ArrayList<Object>();
51         list.add(userName);
52         return (DButils.get(sql, list).size()==1)?DButils.get(sql, list).get(0):null;
53         
54     }
55 }

 

  DButils.java

  1 package dao;
  2 
  3 import java.beans.PropertyVetoException;
  4 import java.sql.Connection;
  5 import java.sql.DriverManager;
  6 import java.sql.PreparedStatement;
  7 import java.sql.ResultSet;
  8 import java.sql.SQLException;
  9 import java.sql.Statement;
 10 import java.util.ArrayList;
 11 import java.util.List;
 12 
 13 import com.mchange.v2.c3p0.ComboPooledDataSource;
 14 
 15 import po.UserPO;
 16 
 17 public class DButils {
 18         
 19     /**
 20      * 连接池
 21      */
 22     static ComboPooledDataSource dateSource;
 23     static{
 24         dateSource=new ComboPooledDataSource();
 25         final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
 26         final String USER="root";
 27         final String PASSWORD="";
 28         final String DRIVER="com.mysql.jdbc.Driver";
 29         try {
 30             dateSource.setDriverClass(DRIVER);
 31             dateSource.setJdbcUrl(URL);
 32             dateSource.setUser(USER);
 33             dateSource.setPassword(PASSWORD);
 34             dateSource.setMaxPoolSize(100);
 35             dateSource.setMinPoolSize(10);
 36             dateSource.setMaxStatements(10000); 
 37         } catch (PropertyVetoException e) {
 38             e.printStackTrace();
 39         }
 40     }
 41     
 42     
 43     /**
 44      * 单例模式
 45      */
 46 //    public static Connection conn=null;
 47 //    static{
 48 //        /*
 49 //         * 把常量和公用的放在static块里加载
 50 //         * */
 51 //        final String URL="jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8";
 52 //        final String USER="root";
 53 //        final String PASSWORD="";
 54 //        
 55 //        try{
 56 //            Class.forName("com.mysql.jdbc.Driver");
 57 //            conn=DriverManager.getConnection(URL,USER,PASSWORD);
 58 //        }catch(Exception e){
 59 //            e.printStackTrace();
 60 //        }
 61 //        
 62 //    }
 63     
 64     public static boolean cud(String sql,List<Object> list){        //增删改方法合并
 65         boolean flag=false;
 66         PreparedStatement stat=null;
 67         Connection conn=null;
 68         try{
 69             conn=dateSource.getConnection();
 70             stat=conn.prepareStatement(sql);    //对sql语句进行预处理
 71             
 72             if(list!=null){    
 73                 for(int i=0;i<list.size();i++){    //对list中存放的?里的值循环,并对sql中的?赋值
 74                     stat.setObject(i+1, list.get(i));
 75                 }
 76             }
 77             
 78             int res=stat.executeUpdate();    //执行预处理语句指令
 79             flag=(res>0)?true:false;
 80             
 81         }catch(Exception e){
 82             e.printStackTrace();
 83         }finally{
 84             close(conn, stat, null);
 85         }
 86                 
 87         return flag;
 88     }
 89     
 90     /**
 91      * 关闭流
 92      * @param conn    数据库连接
 93      * @param stat    预处理指令
 94      * @param res    返回结果集
 95      */
 96     public static void close(Connection conn,PreparedStatement stat,ResultSet res){
 97         try{
 98             if(conn!=null ){
 99                 conn.close();
100             if(stat!=null ){
101                 stat.close();
102             }
103             if(res!=null ){
104                 res.close();
105             }
106             }
107         }catch(Exception e){
108             e.printStackTrace();
109         }
110 
111     }
112     
113     /**
114      *  获取连接池中的连接
115      */
116     public static Connection getConn(){
117         try {
118             return dateSource.getConnection();
119         } catch (SQLException e) {
120             e.printStackTrace();
121         }
122         return null;
123     }
124     
125     /**
126      * 数据库查找
127      * @param sql
128      * @param list
129      * @return
130      */
131     public static List<UserPO> get(String sql,List<Object> list){
132         List<UserPO> users=new ArrayList<UserPO>();
133         
134         Connection conn=getConn();
135         PreparedStatement stat=null;
136         ResultSet res=null;
137         try {
138             stat=conn.prepareStatement(sql);    //sql语句预处理
139             
140             if(list!=null){
141                 for(int i=0;i<list.size();i++){
142                     stat.setObject(i+1, list.get(i));    //预处理语句?赋值
143                 }
144             }
145             
146         res=stat.executeQuery();    //执行sql语句
147         UserPO user=null;
148         while(res.next()){    
149             user=new UserPO();
150             user.setUserName(res.getString("userName"));
151             user.setPassWd(res.getString("passWd"));
152             users.add(user);
153         }
154             
155         } catch (SQLException e) {
156             e.printStackTrace();
157         }finally{
158             close(conn,stat,res);
159         }    
160         return users;
161     }
162 }

 

 

 

  2.5  创建测试类进行测试。

  • UserTest.java
复制代码
复制代码
 1 package test;
 2 
 3 import java.util.List;
 4 
 5 import org.junit.Test;
 6 
 7 import dao.userPOImpl;
 8 import po.UserPO;
 9 
10 public class UserTest {
11     @Test
12     public void UserPOTest(){
13         userPOImpl im=new userPOImpl();
14         
15         UserPO user=new UserPO();
16         user.setUserName("张三");
17         user.setPassWd("123");
18         im.addUser(user);
19     }
20     
21     @Test
22     public void userPOget(){
23         userPOImpl im=new userPOImpl();
24         List<UserPO> list=im.gets();
25         for(int i=0;i<list.size();i++)
26             System.out.println(list.get(i).getUserName());
27         
28     }
29     
30     @Test
31     public void delUserTest(){
32         userPOImpl im=new userPOImpl();
33         im.delUser("张三");
34     }
35     @Test
36     public void uptUserTest(){
37         userPOImpl im=new userPOImpl();
38         UserPO user=new UserPO();
39         user.setUserName("张三");
40         user.setPassWd("456");
41         im.uptUser(user);
42     }
43 }
复制代码

 

 

 

 

posted @ 2017-03-06 21:33  shyroke、  阅读(348)  评论(0编辑  收藏  举报
作者:shyroke 博客地址:http://www.cnblogs.com/shyroke/ 转载注明来源~