zoukankan      html  css  js  c++  java
  • (十八)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 }
    复制代码
  • 相关阅读:
    IDE-Android Studio 导入Ecplise项目不改变结构
    IDE-Android Studio -FAQ-使用习惯(不断更新 欢迎留言)
    IDE-Ecplise-代码注释 模版 编码规范 配色
    android- 远程调试
    phpstorm所有快捷键表格pdf
    phpstorm修改字体和大小
    phpstorm重构代码形式让阅读更简单
    七牛云到底好不好使用经历分享
    一篇文章搞懂php中类型转换
    彻底解决php判断a==0为真引发的问题-类型转换
  • 原文地址:https://www.cnblogs.com/shyroke/p/6512098.html
Copyright © 2011-2022 走看看