common-dbutils.jar学习心得

common-dbutils.jar学习心得

common-dbutils.jar

QueryRunner

update方法:

* int update(String sql, Object… params) –>  可执行增、删、改语句





@Test


public void fun1() throws SQLException {


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


String sql = “insert into t_stu values(?,?,?,?)”;


Object[] params = {1002, “kevin”, 8, “male”};





qr.update(sql, params);


}

* int update(Connection con, String sql, Object… parmas) 

–> 需要调用者提供Connection,

这说明本方法不再管理Connection了。支持事务!


query方法:


* T query(String sql, ResultSetHandler rsh, Object… params) –> 可执行查询


 > 它会先得到ResultSet,然后调用rsh的handle()把rs转换成需要的类型!





public void fun2() throws SQLException {


// 创建QueryRunner,需要提供数据库连接池对象


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


// 给出sql模板


String sql = “select * from t_stu where sid=?”;


// 给出参数


Object[] params = {1001};


// 执行query()方法,需要给出结果集处理器,即ResultSetHandler的实现类对象


// 我们给的是BeanHandler,它实现了ResultSetHandler


// 它需要一个类型,然后它会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean


Stu stu = qr.query(sql, new BeanHandler<Stu>(Stu.class), params);


System.out.println(stu);


}


* T query(Connection con, String sql, ResultSetHadler rsh, Object… params),


 支持事务

ResultSetHandler接口:


* BeanHandler(单行) –> 构造器需要一个Class类型的参数,


用来把一行结果转换成指定类型的javaBean对象 





public void fun2() throws SQLException {


// 创建QueryRunner,需要提供数据库连接池对象


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


// 给出sql模板


String sql = “select * from t_stu where sid=?”;


// 给出参数


Object[] params = {1001};


// 执行query()方法,需要给出结果集处理器,即ResultSetHandler的实现类对象


// 我们给的是BeanHandler,它实现了ResultSetHandler


// 它需要一个类型,然后它会把rs中的数据封装到指定类型的javabean对象中,然后返回javabean


Stu stu = qr.query(sql, new BeanHandler<Stu>(Stu.class), params);


System.out.println(stu);


}





* BeanListHandler(多行) –> 构造器也是需要一个Class类型的参数


  ,用来把一行结果集转换成一个javabean,


那么多行就是转换成List对象,一堆javabean





/**


* BeanListHandler的应用,它是多行处理器


* 每行对象一个Stu对象!


* @throws Exception


*/


@Test


public void fun3() throws Exception {


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


String sql = “select * from t_stu”;


List<Stu> stuList = qr.query(sql, new BeanListHandler<Stu>(Stu.class));





System.out.println(stuList);


}








* MapHandler(单行) –> 把一行结果集转换Map对象


 > 一行记录:


sid  sname  age  gender


1001 kevin     29   male





 > 一个Map:


{sid:1001, sname:cidy, age:29, gender:male}





/**


* MapHandler的应用,它是单行处理器,把一行转换成一个Map对象


* @throws SQLException 


*/


@Test


public void fun4() throws SQLException  {


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


String sql = “select * from t_stu where sid=?”;


Object[] params = {1001};


Map map = qr.query(sql, new MapHandler(), params);





System.out.println(map);


}





* MapListHandler(多行) –> 把一行记录转换成一个Map,


多行就是多个Map,即List<Map>!


/**


* MapListHandler,它是多行处理器,把每行都转换成一个Map,即List<Map>


* @throws SQLException


*/


@Test


public void fun5() throws SQLException  {


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


String sql = “select * from t_stu”;


List<Map<String,Object>> mapList = qr.query(sql, new MapListHandler());





System.out.println(mapList);


}



* ScalarHandler(单行单列)


–> 通常用与select count(*) from t_stu语句!


结果集是单行单列的!它返回一个Object,其实……Integer…Long….BigInteger….等起父类都是Number类型





/**


* ScalarHandler,它是单行单列时使用,最为合适!


* @throws SQLException


*/


@Test


public void fun6() throws SQLException {


QueryRunner qr = new QueryRunner(JdbcUtils.getDataSource());


String sql = “select count(*) from t_stu”;


/*


* Integer、Long、BigInteger


*/


Number cnt = (Number)qr.query(sql, new ScalarHandler());





long c = cnt.longValue();


System.out.println(c);


}


}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100811.html原文链接:https://javaforall.net

(0)
上一篇 2021年5月24日 下午9:00
下一篇 2021年5月24日 下午10:00


相关推荐

  • 使用 OpenAgents 搭建基于智谱 GLM 的本地智能体(Agent)

    使用 OpenAgents 搭建基于智谱 GLM 的本地智能体(Agent)

    2026年3月12日
    2
  • 《大话数据结构》pdf

    《大话数据结构》pdf下载地址:网盘下载编辑推荐编辑超级畅销书《大话设计模式》作者的新作!用户群更为广泛,写作风格一如既往,技术沉淀更加深厚,势必掀起全民数据结构的热潮!内容简介编辑本书为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生…

    2022年6月24日
    22
  • thymeleaf 的 th:onclick,慢慢采坑

    thymeleaf 的 th:onclick,慢慢采坑这里写自定义目录标题 thymeleaf 的 th onclick 引用的函数参数的入参是 model 值的时候注意写法了 3 0 10 开始就变了 thymeleaf 的 th onclick 引用的函数参数的入参是 model 值的时候注意写法了 3 0 10 开始就变了 改了好几个小时 总是不生效 实验了各种写法 终于搞清楚了 使用 spingboot2 1 1 使用的就是 以上的都要注意了

    2026年3月19日
    2
  • 三个月估值翻4倍!Kimi被资本疯抢背后的逻辑

    三个月估值翻4倍!Kimi被资本疯抢背后的逻辑

    2026年3月16日
    3
  • zabbix 监控介绍「建议收藏」

    zabbix 监控介绍「建议收藏」一、监控介绍你用过哪些监控软件?zabbix和nagios、cacti、ganglia有什么区别?zabbix有那些好处?zabbix的监控流程是什么?zabbix常见监控项有那些?1、CactiCacti是一套基于PHP、MySQL、SNMP及RRDTool开发的监测图形分析工具,Cacti是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时,轮询的结果就不能即时的反应设备的状态

    2022年4月28日
    82
  • c语言 socket 非阻塞,C语言Socket入门非阻塞socket(connect timieout问题)

    c语言 socket 非阻塞,C语言Socket入门非阻塞socket(connect timieout问题)如果客户端想连接一个服务器端 但是不能肯定服务器端是否存在 如果存在了是否能连上 怎么判断呢 connect 函数的默认行为是阻塞的 会一直等待在那里 为了判断各种情况 以及遇到错误时结束连接 我们需要使用非阻塞的 socket 一个例子程序 include include include include include include include includeintma void i

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号