29、jdbc操作数据库(6)
通常真正实际开发时,dao层虽然会涉及很多实体,但是可以借助泛型、反射、一些简单工具类来封装一些通用的查询、更新等操作的方法,下面介绍两种方法
第一种:借助元数据类ResultSetMetaData来实现方法的封装,使用Map或者List集合来实现数据的封装(自己感觉使用Map封装数据比实体好),代码如下:
public class BaseDao {private Connection connection;public BaseDao() {connection = getConnection();}/*** 获取数据连接*/public Connection getConnection() {Connection connection = null;try {//获取数据源对象ComboPooledDataSource dataSource = new ComboPooledDataSource("c3p0-config.xml");//通过数据源获取连接connection = dataSource.getConnection();System.out.println(connection);} catch (SQLException e) {e.printStackTrace();System.out.println("获取数据库连接失败!");}return connection;}/*** 添、改、删操作* @param sql sql语句* @param objects 占位符需传递的参数* @return*/public int update(String sql, Object ...objects) {int flag = 0;PreparedStatement pst = null;try {pst = connection.prepareStatement(sql);for (int i = 0 ; i <objects.length ; i++){pst.setObject(i+1, objects[i]);}flag = pst.executeUpdate();} catch (SQLException e) {e.printStackTrace();System.out.println("更新操作失败!");}finally{if (pst != null) {try {pst.close();} catch (SQLException e) {e.printStackTrace();}}}return flag;}/*** 将查询结果集信息封装成一个Map* @param sql* @param objects* @return*/public List<Map> getResultMapList(String sql , Object ...objects) {PreparedStatement pst = null;ResultSet result = null;List<Map> list = new ArrayList<>();try {pst = connection.prepareStatement(sql);for (int i = 0 ; i <objects.length ; i++){pst.setObject(i+1, objects[i]);}result = pst.executeQuery();while(result.next()){Map<String, Object> map = new HashMap<>();ResultSetMetaData metaData = result.getMetaData();int count = metaData.getColumnCount();for (int i = 0; i < count; i++) {String label = metaData.getColumnLabel(i+1);map.put(label, result.getObject(i+1));}list.add(map);}} catch (SQLException e) {e.printStackTrace();System.out.println("查询操作失败!");}finally{try {if (pst != null) {pst.close();}if (result != null) {result.close();}}catch (SQLException e) {e.printStackTrace();}}return list;}/*** 将查询结果集信息封装成一个Map* @param sql* @param objects* @return*/public Map getResultMap(String sql , Object ...objects) {List<Map> list = getResultMapList(sql, objects);return list != null ? list.get(0) : null;}public static void main(String[] args) {BaseDao dao = new BaseDao();String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";dao.update(sql, "zhangsan" , 6);String sql2 = "DELETE FROM USER WHERE ID > ?";dao.update(sql2 , 4);String sql3 = "INSERT INTO USER (UNAME , PASSWORD) VALUES (? ,?)";dao.update(sql3 , "樊少皇" , "123456");String sql4 = "SELECT ID , UNAME , PASSWORD , STATUS FROM USER WHERE ID = ?";Map map = dao.getResultMap( sql4, 20007);String sql5 = "SELECT ID , UNAME , PASSWORD , STATUS FROM USER LIMIT ?";List<Map> resultMapList = dao.getResultMapList(sql5, 10);System.out.println(resultMapList);}
}
第二种:直接借助工具类dbutils实现封装,代码如下:
public class BaseDao {private Connection connection;private QueryRunner queryRunner;public BaseDao() {connection = getConnection();queryRunner = new QueryRunner();}/*** 获取数据连接*/public Connection getConnection() {Connection connection = null;try {//获取数据源对象ComboPooledDataSource dataSource = new ComboPooledDataSource("c3p0-config.xml");//通过数据源获取连接connection = dataSource.getConnection();System.out.println(connection);} catch (SQLException e) {e.printStackTrace();System.out.println("获取数据库连接失败!");}return connection;}/*** 添、改、删操作* @param sql sql语句* @param objects 占位符需传递的参数* @return*/public int update(String sql, Object ...objects) {int flag = 0;try {flag = queryRunner.execute(connection, sql, objects);} catch (SQLException e1) {e1.printStackTrace();}return flag;}/*** 将查询结果集信息封装成一个Map* @param sql* @param objects* @return*/public List<Map<String, Object>> getResultMapList(String sql , Object ...objects) {List<Map<String, Object>> list = null;try {list = queryRunner.query(connection, sql, new MapListHandler(), objects);} catch (SQLException e1) {e1.printStackTrace();}return list;}/*** 将查询结果集信息封装成一个Map* @param sql* @param objects* @return*/public Map<String, Object> getResultMap(String sql , Object ...objects) {Map<String, Object> map = null;try {map = queryRunner.query(connection, sql, new MapHandler(), objects);} catch (SQLException e) {e.printStackTrace();}return map;}public static void main(String[] args) {BaseDao dao = new BaseDao();String sql = "UPDATE USER SET UNAME = ? WHERE ID = ?";dao.update(sql, "zhangsan" , 1);String sql2 = "DELETE FROM USER WHERE ID > ?";dao.update(sql2 , 4);String sql3 = "INSERT INTO USER (UNAME , PASSWORD) VALUES (? ,?)";dao.update(sql3 , "刘德华" , "123456");String sql4 = "SELECT count(1) count FROM USER ";Map map = dao.getResultMap( sql4);System.out.println(map);String sql5 = "SELECT ID , UNAME , PASSWORD , STATUS FROM USER LIMIT ?";List<Map<String, Object>> resultMapList = dao.getResultMapList(sql5, 10);System.out.println(resultMapList);}
}
29、jdbc操作数据库(6)相关推荐
- Java系列技术之JDBC操作数据库-钟洪发-专题视频课程
Java系列技术之JDBC操作数据库-22人已学习 课程介绍 JDBC连接数据库是Java系列技术中数据库知识的核心技术,是学习后续课程JavaWeb入门前需要掌握的基础! 这门课的前 ...
- JavaWeb:用JDBC操作数据库
JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 什么是JDBC JDBC的全称是 ...
- 25、jdbc操作数据库(2)
说一下使用jdbc时涉及到的一些基本的接口和类 java.sql.Driver 是数据库驱动接口,com.mysql.jdbc.Driver是mysql对应的驱动,由数据库供应商实现,用于提供驱动,实 ...
- 24、jdbc操作数据库(1)
什么是jdbc? 看一下官方怎么说,JDBC 英文名Java DataBase Connectivity,使用java连接数据库的工具,就是一组使用java代码来执行SQL语句的API. Jdbc有什 ...
- java监听数据库操作_第十六篇——JDBC操作数据库之监听器
JavaWeb应用中,很多的地方都和session有关.因此session相关的事件监听器,在日常工作中非常有用. 有时候我们需要统计当前在线的人数和访问人数总数,此时就可以使用监听器技术来很简单的实 ...
- Mybatis介绍、jdbc操作数据库原始写法以及Mybatis架构
文章目录 Mybatis介绍 jdbc操作数据库原生写法 使用jdbc编程问题总结 Mybatis架构 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个 ...
- jdba访问mysql_Java中JDBC操作数据库的步骤
Java中JDBC操作数据库的步骤,今天给喜欢Java开发或者是想要参加Java培训学习的小伙伴们分享一些Java技能干货,那就是Java阐述jdba操作数据库的步骤,废话不多说了,随小编一起来看一下 ...
- java完整JDBC操作数据库
java使用JDBC操作数据库的包含以下7个主要步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的 ...
- 说说JDBC 操作数据库的步骤?
分析&回答 1)加载(注册)数据库驱动(到JVM). 2)建立(获取)数据库连接. 3)创建(获取)数据库操作对象. 4)定义操作的SQL语句. 5)执行数据库操作. 6)获取并操作结果集. ...
- 【JDBC】JDBC 简介 ( JDBC 概念 | JDBC 本质 | 使用 JDBC 操作数据库的好处 | JDBC 提供的 API 组件 )
文章目录 一.JDBC 概念 二.JDBC 本质 三.使用 JDBC 操作数据库的好处 四.JDBC 提供的 API 组件 一.JDBC 概念 JDBC 全称 Java DataBase Connec ...
最新文章
- 使用计算机视觉在钢铁平面上检测焊接缺陷
- ​Xamarin iOS教程之视图显示图像
- 【Web安全】JSP内存马研究
- 2017年11月04日普及组 Biotech
- android studio 运行 Java Application
- (前端)html与css,css 4 、继承性和层叠性
- Java当中TreeMap用法
- SEO按天关键词计费排名查询系统源码
- python 双冒号切片_Numpy 学习笔记
- js判断一个元素是否在数组中
- ubuntu本地虚拟机搭建服务器,window配合虚拟机VMware搭建虚拟ubuntu服务器入坑集锦...
- JS AES加密解密实现
- 【广东大学生网络攻防大赛-WriteUp(非官方)】Reverse | pyre
- win7下建立的虚拟机无法连上网络,提示本地连接受限制
- php获取qq头像地址,获取 QQ 头像地址,并且不暴露 QQ 号
- 宋朝五子登科家族金榜进士涂大任后裔在松滋
- 河钢唐钢微尔云计算中心对外签订首个合同
- 1年赋能100家环保机构,阿里云发布“青山绿水”计划
- Python400集大型视频,无偿分享,从正确方向学习python,全套python入门完整视频
- 24. 两两交换链表中的节点-两两反转链表-LeetCode
热门文章
- 7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀
- [JavaWeb-Servlet]Servlet的体系结构
- [剑指offer]面试题10:二进制中1的个数
- dfs中return回溯问题
- 计算机用英语表示方法有哪些,在计算机领域中,通常用英文单词“bit”来表示( )...
- Spring Cloud部分源码分析Eureka,Ribbon,Feign,Zuul
- Java将五个整数存入整形数组_异常处理:从命令行输入5个整数,放入一整型数组,然后打印输出。。。...
- python2字符串编码方式_一、基础部分-2.字符串编码
- 串操作指令及其应用程序的设计与调试运行——汇编实验四 用8086汇编完成下题 编制一程序,从键盘输入两个长度不同的字符串,设字符串长度小于25个字符。要求在屏幕上以右边对齐的形式显示出
- Java开发Web Service的几种解决方案