学科分类
目录
Java Web

DBUtils实现增删改查

通过前面小节的学习,我们已经了解了DBUtils框架的相关API。接下来,通过代码来实现使用DBUtils框架对数据库进行增删改查的基本操作。具体步骤如下:

(1) 在工程chapter03中的cn.itcast.jdbc.utils包下创建类C3p0Utils,该类用于创建数据源。如例1所示:

例1 C3p0Utils.java

1  package cn.itcast.jdbc.utils;

 2  import javax.sql.DataSource;

 3  import com.mchange.v2.c3p0.ComboPooledDataSource;

 4  public class C3p0Utils {

 5   private static DataSource ds;

 6   static{

 7     ds=new ComboPooledDataSource();

 8   }

 9   public static DataSource getDataSource() {

 10    return ds;

 11  }

 12 }

(2) 创建类DBUtilsDao,该类实现了对user表增删改查的基本操作。用QueryRunner类中带参的方法,将数据源传给QueryRunner方法,让它为我们创建和关闭连接。具体代码如下:

例2 DBUtilsDao.java

 1  package cn.itcast.jdbc.example.dao;

 2  import java.sql.SQLException;

 3  import java.util.List;

 4  import org.apache.commons.dbutils.QueryRunner;

 5  import org.apache.commons.dbutils.handlers.BeanHandler;

 6  import org.apache.commons.dbutils.handlers.BeanListHandler;

 7  import cn.itcast.jdbc.example.domain.User;

 8  import cn.itcast.jdbc.utils.C3p0Utils;

 9  public class DBUtilsDao {

 10   //查询所有,返回List集合

 11   public List findAll() throws SQLException{

 12     //创建QueryRunner对象

 13     QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

 14     //写SQL语句

 15     String sql = "select * from user";

 16     //调用方法

 17     List list = 

 18      (List)runner.query(sql, new BeanListHandler(User.class));

 19       return list;

 20   }

 21   //查询单个,返回对象

 22   public User find(int id) throws SQLException{

 23     //创建QueryRunner对象

 24     QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

 25     //写SQL语句

 26     String sql = "select * from user where id=?";

 27     //调用方法

 28       User user=

 29        (User)runner.query(sql, new BeanHandler(User.class), 

 30           new Object[]{id});

 31       return user;

 32   }

 33   //添加用户的操作

 34   public Boolean insert(User user) throws SQLException{

 35      //创建QueryRunner对象

 36     QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

 37       //写SQL语句

 38       String sql = "insert into user (name,password) values (?,?)";

 39       //调用方法

 40       int num =runner.update(sql, new Object[]{

 41           user.getName(),

 42           user.getPassword()

 43       } );

 44       if (num>0)

 45         return true;

 46       return false;

 47   }

 48   //修改用户的操作

 49   public Boolean update(User user) throws SQLException{

 50     //创建QueryRunner对象

 51     QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

 52     //写SQL语句

 53     String sql = "update user set name=?,password=? where id=?";

 54     //调用方法

 55     int num =runner.update(sql, new Object[]{

 56           user.getName(),

 57           user.getPassword(),

 58           user.getId()

 59     } );

 60     if (num>0)

 61       return true;

 62     return false;

 63   }

 64   //删除用户的操作

 65   public Boolean delete(int id) throws SQLException{

 66     //创建QueryRunner对象

 67     QueryRunner runner = new QueryRunner(C3p0Utils.getDataSource());

 68     //写SQL语句

 69     String sql = "delete from user where id=?";

 70     //调用方法

 71     int num =runner.update(sql, id);

 72     if (num>0)

 73         return true;

 74     return false;

 75   }

 76 }

这样,我们就实现了用DBUtils框架对数据库的基本操作。需要注意的是在查询方法中,用到了BeanHandler和BeanListHandler实现类来处理结果集,查询一条数据用的是能够处理一行数据的BeanHandler类,查询所有数据时用的是能处理所有行数据的BeanListHandler类,切勿使用错误,否则会造成程序报错。

(3)分别对类DBUtilsDao中的增删改查操作进行测试,具体实现如下:

首先创建类DBUtilsDaoTest1对增加功能测试,具体代码如例3所示。

例3 DBUtilsDaoTest1.java

1  package cn.itcast.jdbc.example.dao;

 2  import java.sql.SQLException;

 3  import cn.itcast.jdbc.example.domain.User;

 4  public class DBUtilsDaoTest1 {

 5    

 6    private static DBUtilsDao dao=new DBUtilsDao();

 7    

 8    public static void testInsert() throws SQLException{

 9      User user=new User();

 10     user.setName("zhaoliu");

 11     user.setPassword("666666");

 12     boolean b = dao.insert(user);

 13     System.out.println(b);

 14   }

 15   public static void main(String[] args) throws SQLException {

 16     testInsert();

 17   }

 18 }

​ 运行结果如图1所示。

图1 运行结果

在数据库中查询数据是否添加成功,查询结果如下:

mysql> SELECT * FROM user;

+----+----------+----------+

| id | name   | password |

+----+----------+----------+

| 1 | zhangsan | 123456  |

| 2 | lisi   | 123456  |

| 3 | wangwu  | 123456  |

| 4 | zhaoliu | 666666  |

+----+----------+----------+

4 rows in set (0.03 sec)

由查询结果可以看到,添加方法执行成功。接下来,创建类DBUtilsDaoTest2测试修改功能具体如例4所示。

例4 DBUtilsDaoTest2.java

 1  package cn.itcast.jdbc.example.dao;

 2  import java.sql.SQLException;

 3  import cn.itcast.jdbc.example.domain.User;

 4  public class DBUtilsDaoTest2 {

 5    private static DBUtilsDao dao=new DBUtilsDao();

 6    public static void testupdate() throws SQLException{

 7      User user=new User();

 8      user.setName("zhaoliu");

 9      user.setPassword("666777");

 10     user.setId(4);

 11     boolean b = dao.update(user);

 12     System.out.println(b);

 13   }

 14   public static void main(String[] args) throws SQLException {

 15     testupdate();

 16   }

 17 }

运行结果如图2所示。

图2 运行结果

在数据库中查询数据是否修改成功,查询结果如下:

mysql> SELECT * FROM user;

+----+----------+----------+

| id | name   | password |

+----+----------+----------+

| 1 | zhangsan | 123456  |

| 2 | lisi   | 123456  |

| 3 | wangwu  | 123456  |

| 4 | zhaoliu | 666777  |

+----+----------+----------+

4 rows in set (0.00 sec)

由查询结果可以看到,修改方法执行成功。

接下来,创建类DBUtilsDaoTest3测试删除功能,具体如例5所示。

例5 DBUtilsDaoTest3.java

 1  package cn.itcast.jdbc.example.dao;

 2  import java.sql.SQLException;

 3  public class DBUtilsDaoTest3 {

 4    private static DBUtilsDao dao=new DBUtilsDao();

 5    public static void testdelete() throws SQLException{

 6      boolean b = dao.delete(4);

 7      System.out.println(b);

 8    }

 9    public static void main(String[] args) throws SQLException {

 10     testdelete();

 11   }

 12 }

运行结果如图3所示。

图3 运行结果

在数据库中查询数据是否删除成功,查询结果如下:

mysql> SELECT * FROM user;

+----+----------+----------+

| id | name   | password |

+----+----------+----------+

| 1 | zhangsan | 123456  |

| 2 | lisi    | 123456  |

| 3 | wangwu   | 123456  |

+----+----------+----------+

3 rows in set (0.00 sec)

由查询结果可以看到,删除方法执行成功。接下来,创建类DBUtilsDaoTest4测试查询一条数据功能,具体代码如例6所示。

例6 DBUtilsDaoTest4.java

 1  package cn.itcast.jdbc.example.dao;

 2  import java.sql.SQLException;

 3  import cn.itcast.jdbc.example.domain.User;

 4  

 5  public class DBUtilsDaoTest4 {

 6    private static DBUtilsDao dao=new DBUtilsDao();

 7    public static void testfind() throws SQLException{

 8      User user = dao.find(2);

 9    System.out.println(user.getId()+","+user.getName()+","

 10                              +user.getPassword());

 11   }

 12   public static void main(String[] args) throws SQLException {

 13     testfind();

 14   }

 15 }

运行结果如图4所示。

图4 运行结果

由输出结果可以看出,查询方法也成功执行了。至此,我们已经完成了用DBUtils框架实现对数据库的基本操作。从代码上可以看出DBUtils框架在减少代码量的同时还增加了代码的规整性和易读性。

点击此处
隐藏目录