CachedRowSet:可在内存中缓存其各行,使得进行操作是无需总是连接到数据源,是一个非连接rowset,这意味着它只会短暂的连接其数据源,获取数据方式和ResultSet相似,将ResultSet类型的数据放入到CachedRowSet类型的变量中使用populate()。

ResultSet局限性:默认的ResultSet对象不可更新,仅有一个可移动的光标,因此,只能迭代它一次,并且只能从第一行到最后一行。

package com.utils;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.sql.rowset.CachedRowSet;import com.sun.rowset.CachedRowSetImpl;public final class DBUtils {private static String URL = "jdbc:mysql://localhost:3306/mvcdemo";private static String USER = "root";private static String PASSWORD = "1234";private static Connection conn;static {try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(URL, USER, PASSWORD);System.out.println("数据库连接成功!");} catch (SQLException | ClassNotFoundException e) {System.out.println("数据库连接失败!");e.printStackTrace();}}/*** 绑定参数* @param pstmt* @param params* @throws SQLException */private static void bindParams(PreparedStatement pstmt,Object...params) throws SQLException {for (int i = 0; i < params.length; i++) {pstmt.setObject(i+1, params[i]);}}/*** 执行数据库的增、删、改* @param sql 要执行的语句* @param params 参数* @return 执行结果* @throws SQLException*/public static boolean executeNonQuery(String sql,Object...params) throws SQLException {boolean flag = false;try(PreparedStatement pstmt = conn.prepareStatement(sql);) {bindParams(pstmt, params);int result = pstmt.executeUpdate();flag = result > 0;} catch (SQLException e) {e.printStackTrace();throw e;}return flag;}/*** 显示一行一列的数据* @param sql 要执行的语句* @param params* @return 返回一行一列的结果* @throws SQLException*/public static Object executeScalar(String sql,Object...params) throws SQLException {ResultSet rs = null;try(PreparedStatement pstmt = conn.prepareStatement(sql);){bindParams(pstmt, params);rs = pstmt.executeQuery();  if(rs.next()) {return rs.getObject(1);}}catch(SQLException e) {e.printStackTrace();throw e;}finally {if(rs != null) {rs.close();}} return null;}   /*** 执行查询* @param sql 查询的语句* @param params 查询的参数* @return 结果集* @throws SQLException*/public static CachedRowSet executesQuery(String sql,Object...params) throws SQLException {//创建CachedRowSet对象CachedRowSet crs = new CachedRowSetImpl();ResultSet rs = null;try(PreparedStatement pstmt = conn.prepareStatement(sql);) {bindParams(pstmt, params);rs = pstmt.executeQuery();//将ResultSet转换为CachedRowSetcrs.populate(rs);} catch (SQLException e) {e.printStackTrace();throw e;}finally {if(rs != null) {rs.close();}}return crs;}
}

使用CachedRowSet建立连接数据库工具类DBUtils相关推荐

  1. 2021开年巨作!JDBC连接数据库工具类!

    JDBC连接数据库工具类! 去年十一月二十号更新完之后就一直没有更新,因为被派出差天天九九六的日子让我毫无心思在上面写博客. 唉,马上就要过年了,小伙伴们是不是还在熬夜加班加点赶项目呢?同是天涯沦落人 ...

  2. java dbhelper类_DBHelper--Java JDBC SSH 连接数据库工具类

    概述 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. 简单使用 使用JDBC需要以下几个步骤 1. 加载JDBC ...

  3. 原生JDBC和工具类的基本实现

    工具: IDEA MySQL8.0或之前版本 文章目录 JDBC原理 JDBC入门案例 JDBC的API详解 JDBC增删改查操作 JDBC工具类 JDBC是Java访问数据库的标准规范,可以为不同的 ...

  4. jdbc连接mysql工具类_jdbc之工具类DBUtil的使用

    首先回顾一下jdbc的使用方法: 1. 注册驱动 2. 建立连接 3. 建立statement 4. 定义sql语句 5. 执行sql语句,如果执行的是查询需遍历结果集 6. 关闭连接 其中建立连接和 ...

  5. MD5加密工具类(实战版)

    MD5加密工具类(实战版) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成 ...

  6. java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】

    Druid连接数据库,DBUtils工具类的使用 1.在maven中添加Druid依赖 com.alibaba druid 1.2.0 2.封装Druid连接方法 import com.alibaba ...

  7. 30_java之DButils工具类

    01DButils工具类的介绍个三个核心类 * A: DButils工具类的介绍个三个核心类* a: 概述* DBUtils是java编程中的数据库操作实用工具,小巧简单实用.* DBUtils封装了 ...

  8. 连接数据库时常用的工具类(一)-------C3P0XmlUtils

    工具类一:C3P0XmlUtils 使用前应先把c3p0-config.xml 文件导入到Src的根目录下,如下图 下面为C3P0XmlUtils工具类: package cn.kgc.c3p0_xm ...

  9. JDBC实例--工具类升级,使用Apache DBCP连接池重构DBUtility,让连接数据库更有效,更安全...

    直接使用JDBC访问数据库时,需要避免以下隐患: 1. 每一次数据操作请求都需要建立数据库连接.打开连接.存取数据和关闭连接等步骤.而建立和打开数据库连接是一件既耗资源又费时的过程,如果频繁发生这种数 ...

最新文章

  1. 重磅丨We Are SocialHootsuite:2018全球数字报告
  2. python编程软件v-Thonny(Python编程工具) V3.2.5 官方版
  3. python圆柱体,用PYTHON将圆柱体分散到3D XYZ点数据
  4. 四十一、Python统计模块statistics
  5. 用户测评 | EDAS Serverless 上手体验 1
  6. kafka和zookeeper一键启停脚本(以及kafka关不掉问题解决)
  7. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第31篇]Game Hopping证明
  8. python defaultdict 类属性_Python collections.defaultdict模块用法详解
  9. Dubbo源码分析系列之-深入Dubbo扩展机制
  10. [Windows编程] 如何判断操作系统是64位还是32位
  11. .NET Core 管道
  12. 计算机休眠变关机,笔记本电脑一进入睡眠休眠就关机!重启后就显 – 手机爱问...
  13. 魔方机器人之下位机编程-----两种串口通信方式的比较
  14. 是时候开始好好考虑自己的职业定位了
  15. 固态硬盘故障检测_有哪些好用的检测软件是用于判断固态硬盘故障的?
  16. WiFi mac地址详解
  17. android 缓存文件目录在哪个文件夹,哔哩哔哩缓存在哪个文件夹 具体操作步骤
  18. 基于CH340G的STC单片机一键下载电路
  19. Android 仿淘宝京东等我的订单界面及任意列表拓展
  20. Swift不深入只浅出入门教程-孟祥月-专题视频课程

热门文章

  1. 设置搜狗浏览器搜索引擎默认为百度
  2. Python标准库:datetime 时间和日期模块 —— 时间的获取和操作详解
  3. 适合初学者的 Python3爬虫获取自如网北京租房数据
  4. 【ABC三维路径规划】基于matlab人工蜂群算法无人机三维路径规划【含Matlab源码 021期】
  5. 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】
  6. 【介绍】开源的WAF(应用防火墙)软件有哪些?
  7. 互联网,传递人性正能量
  8. 1-专栏可移+隐藏专栏+文章私密
  9. 怎么桥接两个无线路由器
  10. 实战:如何打造一个好的标题进行引流?