2020-10-09_"string sql = \"select sid from student where snam-程序员宅基地

技术标签: 笔记  java  

如何使用DBUtils

一、DBUtils概述
Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
DBUtils是java编程中的数据库操作实用工具,小巧简单实用,
1.对于数据表的读操作,它可以把结果转换成List,Array,Set等java集合,便于程序员操作;
2.对于数据表的写操作,也变得很简单(只需写sql语句)
3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能–重用已经构建好的数据库连接对象,而不像php,asp那样,费时费力的不断重复的构建和析构这样的对象。
二、DBUtils的API

DBUtils包括3个包:

org.apache.commons.dbutils

org.apache.commons.dbutils.handlers

org.apache.commons.dbutils.wrappers

DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。

org.apache.commons.dbutils

DbUtils 关闭链接等操作

QueryRunner 进行查询的操作

org.apache.commons.dbutils.handlers

ArrayHandler :将ResultSet中第一行的数据转化成对象数组

ArrayListHandler将ResultSet中所有的数据转化成List,List中存放的是Object[]

BeanHandler :将ResultSet中第一行的数据转化成类对象

BeanListHandler :将ResultSet中所有的数据转化成List,List中存放的是类对象

ColumnListHandler :将ResultSet中某一列的数据存成List,List中存放的是Object对象

KeyedHandler :将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据

MapHandler :将ResultSet中第一行的数据存成Map映射

MapListHandler :将ResultSet中所有的数据存成List。List中存放的是Map

ScalarHandler :将ResultSet中一条记录的其中某一列的数据存成Object

org.apache.commons.dbutils.wrappers

SqlNullCheckedResultSet :对ResultSet进行操作,改版里面的值

StringTrimmedResultSet :去除ResultSet中中字段的左右空格。Trim()

主要方法:

DbUtils类:启动类

ResultSetHandler接口:转换类型接口

MapListHandler类:实现类,把记录转化成List

BeanListHandler类:实现类,把记录转化成List,使记录为JavaBean类型的对象

Query Runner类:执行SQL语句的类

三、DBUtils的使用
在使用过程中,只看DBUtils和QueryRunner两个类和一个接口ResultSethandler

具体的代码如下:
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;
importorg.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
public class Demo1 {
//总结:使用DBUtils工具的步骤就是,
/**

    • 首先要创建一个QueryRunner对象
    • 然后给出sql语句
    • 通过QueryRunner对象来执行SQL语句,并且针对不用的SQL语句使用不同的结果集处理器。
    • 并且本对象会自动关闭连接。
      /
      /
      *
  • 测试增删改(她们的模板差不多)
  • @throws SQLException
    */
    public void fun1() throws SQLException {
    student stu = new student();
    stu.setSid(“1007”);
    stu.setSname(“蒋干”);
    stu.setSage(“35”);
    stu.setSgender(“男”);
    add(stu);
    }

/**

  • 增加方法
  • @throws SQLException
    */
    //创建一个QueryRunner 对象,并且传递一个连接池参数,这样以后调用的本方法时候就不用
    //再提供Connection了,如果没有提供,那么调用本方法时,就必须要提供Connection
    public void add(student stu) throws SQLException {
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
    String sql = “insert into student values(?,?,?,?)”;
    qr.update(sql, stu.getSid(),stu.getSname(),stu.getSage(),stu.getSgender());

}
public void fun2() throws SQLException {
student stu = new student();
stu.setSid(“1007”);
stu.setSname(“蒋干 不知不觉”);
stu.setSage(“35”);
stu.setSgender(“男”);
update(stu);
}
//修改
public void update(student stu) throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “update set sname=?,sage=?,sgender=? where sid =d?”;
qr.update(sql, stu.getSid(),stu.getSname(),stu.getSage(),stu.getSgender());

}
public void fun3() throws SQLException {
delete(“1007”);
}
//删除方法
public void delete(String id) throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “delete from studnt where id=?”;
qr.update(sql, id);
}

/**

  • 查询语句
  • @throws SQLException
    */
    //BeanHandler结果集处理器用来处理,把单行查询得到的结果集抓换成对象
    public void fun4() throws SQLException {
    //创建对象
    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
    ResultSetHandler rsh = new BeanHandler(student.class);
    String sql = “select * from student where sid=?”;
    student stu = qr.query(sql, rsh, “1007”);

}
//BeanListHandler用于处理多行结果集,把多个结果分别封装成对象,并且添加到一个集合中
//不过得到的结果需要进行强转,可以使用增强for循环集合的遍历。
public void fun5() {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select * from student”;
List rshList = (List) new BeanListHandler(student.class);
for(student L:rshList) {
System.out.println(L);
}
}
//MapHandler是把得到的单行结果集封装到一个map中
//其中map的键对应的是列名称,值对应的是列的值 。
public void fun6() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select * from student where id=?”;
Map<String,Object> map = qr.query(sql, new MapHandler(),“1003”);
System.out.println(map);
}

//MapListHandler用来处理多行结果集,是把多行结果集中的每行数据封装成一个对象在map中,然后把多个Map
//封装到一个集合中,写成了List<Map<String,Object>>
public void fun7() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select * from student”;
List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler());
for(Map<String,Object> map:mapList) {
System.out.println(map);
}
}
//用来处理单列多(单)行的数据,封装到集合中
public void fun8() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select sname from student”;
List nameList = qr.query(sql, new ColumnListHandler());
System.out.println(nameList);
}
//scalarHandler通常用在聚合函数查询的结果集处理,对单列单行进行处理
public void fun9() throws SQLException {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSouse());
String sql = “select count(1) from student”;
//这是个重点如果你此时强转用的是Integer 或者long类型的话,都是不行的,因为数据类型的大小可能
//不够使用发的,比如long类型的可以容纳20的阶乘,但是21的阶乘就超出范围,但是数据类型共同的父类
//就是Number,用这个是绝对不会出现超出范围的情况
//处理方法可以是,number.intValue(),或者是number.LongValue();
Number num = (Number)qr.query(sql, new ScalarHandler());
System.out.println(num.intValue());
}
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45584659/article/details/108980246

智能推荐

java 实现 数据库备份_java数据备份-程序员宅基地

文章浏览阅读1k次。数据库备份的方法第一种:使用mysqldump结合exec函数进行数据库备份操作。第二种:使用php+mysql+header函数进行数据库备份和下载操作。下面 java 实现数据库备份的方法就是第一种首先我们得知道一些mysqldump的数据库备份语句备份一个数据库格式:mysqldump -h主机名 -P端口 -u用户名 -p密码 --database 数据库名 ..._java数据备份

window10_ffmpeg调试环境搭建-编译64位_win10如何使用mingw64编译ffmpeg-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏14次。window10_ffmpeg调试环境搭建_win10如何使用mingw64编译ffmpeg

《考试脑科学》_考试脑科学pdf百度网盘下载-程序员宅基地

文章浏览阅读6.3k次,点赞9次,收藏14次。给大家推荐《考试脑科学》这本书。作者介绍:池谷裕二,日本东京大学药学系研究科教授,脑科学研究者。1970年生于日本静冈县,1998年取得日本东京大学药学博士学位,2002年起担任美国哥伦比亚大学客座研究员。专业为神经科学与药理学,研究领域为人脑海马体与大脑皮质层的可塑性。现为东京大学药学研究所教授,同时担任日本脑信息通信融合研究中心研究主任,日本药理学会学术评议员、ERATO人脑与AI融合项目负责人。2008年获得日本文部大臣表彰青年科学家奖,2013年获得日本学士院学术奖励奖。这本书作者用非常通俗易懂_考试脑科学pdf百度网盘下载

今天给大家介绍一下华为智选手机与华为手机的区别_华为智选手机和华为手机的区别-程序员宅基地

文章浏览阅读1.4k次。其中,成都鼎桥通信技术有限公司是一家专业从事移动通讯终端产品研发和生产的高科技企业,其发布的TD Tech M40也是华为智选手机系列中的重要代表之一。华为智选手机是由华为品牌方与其他公司合作推出的手机产品,虽然其机身上没有“华为”标识,但是其品质和技术水平都是由华为来保证的。总之,华为智选手机是由华为品牌方和其他公司合作推出的手机产品,虽然外观上没有“华为”标识,但其品质和技术水平都是由华为来保证的。华为智选手机采用了多种处理器品牌,以满足不同用户的需求,同时也可以享受到华为全国联保的服务。_华为智选手机和华为手机的区别

c++求n个数中的最大值_n个数中最大的那个数在哪里?输出其位置,若有多个最大数则都要输出。-程序员宅基地

文章浏览阅读7.6k次,点赞6次,收藏17次。目录题目描述输入输出代码打擂法数组排序任意输入n个整数,把它们的最大值求出来.输入只有一行,包括一个整数n(1_n个数中最大的那个数在哪里?输出其位置,若有多个最大数则都要输出。

python overflowerror_python – 是否真的引发了OverflowError?-程序员宅基地

文章浏览阅读520次。Python 2.7.2 (v2.7.2:8527427914a2, Jun 11 2011, 15:22:34)[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> float(1...

随便推点

Linux常用命令_ls-lmore-程序员宅基地

文章浏览阅读4.8k次,点赞17次,收藏51次。Linux的命令有几百个,对程序员来说,常用的并不多,考虑各位是初学者,先学习本章节前15个命令就可以了,其它的命令以后用到的时候再学习。1、开机 物理机服务器,按下电源开关,就像windows开机一样。 在VMware中点击“开启此虚拟机”。2、登录 启动完成后,输入用户名和密码,一般情况下,不要用root用户..._ls-lmore

MySQL基础命令_mysql -u user-程序员宅基地

文章浏览阅读4.1k次。1.登录MYSQL系统命令打开DOS命令框shengfen,以管理员的身份运行命令1:mysql -u usernae -p password命令2:mysql -u username -p password -h 需要连接的mysql主机名(localhost本地主机名)或是mysql的ip地址(默认为:127.0.0.1)-P 端口号(默认:3306端口)使用其中任意一个就OK,输入命令后DOS命令框得到mysql>就说明已经进入了mysql系统2. 查看mysql当中的._mysql -u user

LVS+Keepalived使用总结_this is the redundant configuration for lvs + keep-程序员宅基地

文章浏览阅读484次。一、lvs简介和推荐阅读的资料二、lvs和keepalived的安装三、LVS VS/DR模式搭建四、LVS VS/TUN模式搭建五、LVS VS/NAT模式搭建六、keepalived多种real server健康检测实例七、lvs持久性工作原理和配置八、lvs数据监控九、lvs+keepalived故障排除一、LVS简介和推荐阅读的资料 学习LVS+Keepalived必须阅读的三个文档。1、 《Keepalived权威指南》下载见http://..._this is the redundant configuration for lvs + keepalived server itself

Android面试官,面试时总喜欢挖基础坑,整理了26道面试题牢固你基础!(3)-程序员宅基地

文章浏览阅读795次,点赞20次,收藏15次。AIDL是使用bind机制来工作。java原生参数Stringparcelablelist & map 元素 需要支持AIDL其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。下图是我进阶学习所积累的历年腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

机器学习-数学基础02补充_李孟_新浪博客-程序员宅基地

文章浏览阅读248次。承接:数据基础02

短沟道效应 & 窄宽度效应 short channel effects & narrow width effects-程序员宅基地

文章浏览阅读2.8w次,点赞14次,收藏88次。文章目录1. 概念:Narrow Width Effect: 窄宽度效应Short Channel effects:短沟道效应阈值电压 (Threshold voltage)2. 阈值电压与沟道长和沟道宽的关系:Narrow channel 窄沟的分析Short channel 短沟的分析1. 概念:Narrow Width Effect: 窄宽度效应在CMOS器件工艺中,器件的阈值电压Vth 随着沟道宽度的变窄而增大,即窄宽度效应;目前,由于浅沟道隔离工艺的应用,器件的阈值电压 Vth 随着沟道宽度_短沟道效应

推荐文章

热门文章

相关标签