1704-MySQL-DBUtils的增删改查操作

2017-07-31  本文已影响72人  Holtto

1,说明:

DBUtils是java编程中数据库操作的实用工具,小巧简单实用。第一个操作数据库的框架(jar)
DBUtils封装了许多JDBC的代码,简化了JDBC操作,可以少写很多代码
DBUtils三个核心功能的介绍:
DBUtils类:
它就是一个工具类,定义了关闭资源和事务处理的方法

QueryRunner类:
提供了对sql语句操作的方法,query():查询,update():修改

ResultSetHandler接口:
用于定义select操作后,如何封装结果集
QueryRunner核心类
QueryRunner(DataSource ds):提供数据源(连接池)DataSource,DBUtils底层自动维护和连接Connection数据库query(String sql, ResultSetHandler<T> rsh, Object... params):执行查询语句select
update(String sql, Object... params):执行更新语句insert,update,delete,参数就是一个数组,参数个数取决于sql语句中?的个数


2. ResultSetHandler结果集处理

Handler类型 说明
BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ScalarHandler 它是用于单个数据。例如select count(*) from 表操作。
ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中
KeyedHandler 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
MapHandler 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
MapListHandler 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。

3. javaBean组件

JavaBean就是一个类,在开发中常用于封装数据。具有如下特性
1.需要实现接口:java.io.Serializable ,通常偷懒省略了。
2.提供私有字段:private 类型 字段名;
3.提供getter/setter方法:
4.提供无参构造
javabean类:User类

  public class User{
        private int Uid;
        private String Uname;
public User() {
         
    }
    public int getUid() {
        return Uid;
    }
    public void setUid(int uid) {
        this.Uid = uid;
    }
    public String getUname() {
        return Uname;
    }
    public void setUname(String uname) {
        this.Uname = uname;
    }
    public String getUpassword() {
        return Upassword;
    }
    public void setUpassword(String upassword) {
        this.Upassword = upassword;
    }
            
}

4. DBUtils完成CRUD

首先必须用C3P0编写一个工具类,所以要提供C3P0的jar包和xml配置文件,其次还需要DBUtils的jar包 :

commons-dbutils-1.4.jar

编写测试类
根据C3P0的工具类创建连接池
根据要求用QueryRunner完成查询和更新,用ResultSetHandler完成结果集操作
释放资源(DBUtils查询完自动放回连接或关闭资源)


5. 练习

对user表增删改查

1、增(update)
要求:向user表添加一条数据:null,"王五",“赵六"

@Test
public void insert() {
    //1:通过连接池获取QueryRunner对象,QueryRunner底层自动维护和获取连接对象Connection
    //QueryRunner()中传入连接池,因此要在C3P0Utils里面加入获取连接池的方法,getDataSource()
    QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());

    //2:编写sql语句
    String sql = "insert into user values(?,?,?)";

    //3:使用QueryRunner的update()方法进行操作
    Object[] params = {null,"王五",“赵六”};
    try {
        qr.update(sql, params);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

2、删(update)

//从user表中删除name为李二的数据

@Test
public void delete() {
    //1:通过连接池获取QuerryRunner对象
    QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());

    //2:编写sql语句
    String sql = "delete from user where name=?";

    //3.使用QueryRunner的update方法执行sql语句
    Object[] params = {"李二"};
    try {
        qr.update(sql, params);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

3、改(update)

 @Test
public void alter() {
    //1:通过连接池获取QueryRunner对象
    QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());

    //2:编写sql语句
    String sql = "update user set Upassword=? where Uname=?";

    //3:使用QueryRunner对象的update方法执行sql语句
    Object[] params = {88,"张三"};
    try {
        qr.update(sql, params);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

4、查(query)
要求:查询user表中所有人的信息(查询许多行信息)
//查询user表中所有人的信息

@Test
public void queryAll() {
    //1:通过连接池获取QueryRunner对象
    QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());

    //2:编写sql语句
    String sql = "select * from user";

    //3:使用QueryRunner的query方法查询
    Object[] params = {};
    try {
        //获取所有人的数据,使用BeanListHandler<>(User.class),以User封装得到的字段信息,
            存储入集合List
        List<User> user = qr.query(sql, new BeanListHandler<>(User.class), params);
        System.out.println(user);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

要求:查询user表中name为李四的信息(查询一行信息)

@Test
public void query() {
    //1:通过连接池获取QueryRunner对象
    QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());

    //2:编写sql语句
    String sql = "select * from user where name=?";

    //3:使用QueryRunner的query方法查询一行数据
    Object[] params = {"何一"};
    try {
        //查询一行数据,不需要用集合存储,用单个用户储存即可,因此用BeanHandler
        User userr = qr.query(sql, new BeanHandler<>(User.class), params);
        System.out.println(user);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
 
//要求:统计user表中的人数
@Test
public void queryOne() {
    //1:通过连接池获取QueryRunner对象
    QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());

    //2:编写sql语句
    String sql = "select count(*) from user";

    //3:使用QueryRunner的query方法查询
    Object[] params = {};
    try {
        Object count = qr.query(sql, new ScalarHandler());
        System.out.println(count);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
}
上一篇下一篇

猜你喜欢

热点阅读