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


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();
    }
}
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容