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框架在减少代码量的同时还增加了代码的规整性和易读性。