DAO层演练代码

2023-10-27

part 1: 原始版

public class JDBCUtil {
    /**
     * 获取连接操作
     * @return
     * @throws Exception
     */
    public static Connection getConnection() throws Exception {
//        获取数据库四要素:读取配置文件
        InputStream in = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
        Properties pros = new Properties();
        pros.load(in);
        String driverClass = pros.getProperty("driverClass");
        String url = pros.getProperty("url");
        String user = pros.getProperty("user");
        String password = pros.getProperty("password");

        Class.forName(driverClass);
        return DriverManager.getConnection(url, user, password);
    }

    /**
     * 关闭资源的操作
     * @param conn
     * @param ps
     */
    public static void closeResource(Connection conn,PreparedStatement ps){
        try {
            if(ps != null)
                ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn != null)
                conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
    public static void closeResource(Connection conn, PreparedStatement ps, ResultSet rs){
        try {
            if(ps != null)
                ps.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(conn != null)
                conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if(rs != null)
                rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
url=jdbc:mysql://localhost:13306/test?rewriteBatchedStatements=true
user=root
password=root
driverClass=com.mysql.jdbc.Driver
public abstract class BaseDAO {
    //    通用的增删改操作----Version 2.0
    public int update(Connection conn, String sql, Object ...args)  {//sql中的占位符的个数与args参数的个数一致
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i + 1,args[i]);
            }
            int i = ps.executeUpdate();
            return i;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeResource(null,ps);
        }
        return 0;
    }

    /**
     * 通用的查询操作,用于返回数据表的一条记录,version 2.0 考虑了事务
     * @param clazz
     * @param sql
     * @param args
     * @param <T>
     * @return
     */
    public <T> T getInstance(Connection conn,Class<T> clazz,String sql, Object ...args) {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i + 1,args[i]);
            }
            rs = ps.executeQuery();
            if(rs.next()){
                T t = clazz.newInstance();
                ResultSetMetaData metaData = rs.getMetaData();
                int columnCount = metaData.getColumnCount();
                for (int i = 0; i < columnCount; i++) {
                    Object columnValue = rs.getObject(i + 1);
                    String columnLabel = metaData.getColumnLabel(i + 1);
                    Field field = clazz.getDeclaredField(columnLabel);
                    field.setAccessible(true);
                    field.set(t,columnValue);
                }
                return t;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeResource(conn,ps,rs);
        }
        return null;

    }

    /**
     * 返回不同表的多条查询记录
     * @param clazz
     * @param sql
     * @param args
     * @param <T>
     * @return
     */
    public <T> List<T> getInstanceList(Connection conn,Class<T> clazz, String sql, Object ...args){
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            for (int i = 0; i < args.length; i++) {
                ps.setObject(i + 1,args[i]);
            }
            rs = ps.executeQuery();
            List<T> list = new ArrayList<>();
            while(rs.next()){
                T t = clazz.newInstance();
                ResultSetMetaData metaData = rs.getMetaData();
                int columnCount = metaData.getColumnCount();
                for (int i = 0; i < columnCount; i++) {
                    Object columnValue = rs.getObject(i + 1);
                    String columnLabel = metaData.getColumnLabel(i + 1);
                    Field field = clazz.getDeclaredField(columnLabel);
                    field.setAccessible(true);
                    field.set(t,columnValue);
                }
                list.add(t);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtil.closeResource(null,ps,rs);
        }
        return null;
    }

//    用于查询通用值的查询方法
    public <E> E getValue(Connection conn,String sql,Object...args) {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(sql);
            for (in
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DAO层演练代码 的相关文章

  • DDD - 跨有界上下文边界聚合根实体使用情况

    在域模型中对实体身份进行建模的一种建议方法是创建值对象而不是使用原始类型 例如在 C 中 public class CustomerId public long Id get set 在我看来 此类应该在整个应用程序中使用 而不仅仅是在域模
  • Android 构建 gradle 在特定设备上失败

    我面临一个奇怪的问题 当我编译我的应用程序以在 Android 7 0 的设备上运行它时 它可以工作 但是当我尝试为 Android 4 2 1 的设备进行编译时 它会失败并出现以下错误 错误 任务 app transformClasses
  • C# 是否包含 IParsable 或 ItryParsable

    显然 为您自己的解决方案实现以下接口将相当简单 public interface IParsable
  • OpenCV RGB转灰度

    我正在做一个视频监控项目 我看不到从 RGB 到灰度的转换 我为灰色设置了黑色窗口 你能帮我解决这个问题吗 附代码 另外 如何获得当前帧和前一帧之间的差异 多谢 宜兰 include stdafx h include
  • 如何在没有JDK的情况下运行jcmd?

    我正在尝试弄清楚如何将 jcmd exe 删除到安装在客户端站点的 Windows 服务器上 以便我们可以解决堆和线程问题 不太想安装完整的 JDK 因为它会使环境变得复杂 jcmd exe 肯定需要运行 JDK 中的某些组件 但我无法确定
  • Java 的类加载器与 jars-with-jars

    我们有一个可执行的 JAR 文件有时包含其他 JAR 文件 整个事情依赖于另外四个下载的 JAR 骑在太空中一只巨大的部署乌龟的背上 在运行时 我们动态加载嵌套的 JAR 文件 执行以下操作 wearyingly verbose error
  • 在业务逻辑中使用反射是一种好的做法吗?

    我需要开发一个由两个主要部分组成的应用程序 具有特定业务类别的业务逻辑部分 例如书籍 图书馆 作者 一个通用部分 可以在数据网格中显示书籍 图书馆 将它们映射到数据库 通用部分使用反射从业务类中获取数据 而不需要在业务类中编写特定的数据网格
  • 在运行时检查 GCC 版本

    我需要找出 C 程序执行过程中 运行时 可用的 系统中安装的 GCC 版本 主要版本和次要版本 意思是 以编程方式提取可用 gcc 的版本 就像我在 shell 中输入 gcc version 一样 但在 c 程序中 The GNUC an
  • 在屏幕上随机生成一个圆圈并将其设为绿色或红色

    所以我一直在尝试制作一个游戏应用程序 它可以在 Android 屏幕上随机显示带有文本的红色按钮或带有文本的绿色按钮 如果有人可以帮助我 我将不胜感激 另外 如果有人知道如何做到这一点 我想慢慢地产生更快的酷优势 谢谢 SuppressLi
  • 通用接口和实现 - 类型无法转换

    我有一个通用接口定义为 public interface ItemService
  • 数组到集合:优化代码

    有更好的方法来实现这一目标吗 public static List
  • 如何在Java中创建关联列表?

    我正在尝试让用户输入String在列表中搜索值 这工作正常 但我也想要String具有数值 这样我就可以得到清单价格中的某些商品 我试过 public List
  • 在 Play 上强制实施 SSL!框架

    我目前正在使用 Play 1 2 2 及其新的 Netty 客户端框架 尽管可以让 HTTP 和 HTTPS 异步服务 但我还没有找到一种简单的方法来强制执行 SSL 有没有人使用过 Play 有强制实施 SSL 的简单方法吗 不确定我是否
  • Spring 表单处理,将实体映射到表单输入

    只是查看 petclinic 示例应用程序 并尝试学习表单处理 看起来形式与实体是 1 1 映射的 正确吗 是否还有任何其他配置需要完成 或者 Spring 只知道所有表单输入都映射到实体 因为这是在 GET 请求中添加到模型中的内容 Co
  • 为什么我收到 NoClassDefFoundError: org/reactivestreams/Publisher

    Stream java import io reactivex public class Stream public static void main String args Observable just Howdy subscribe
  • 是否有在 std 容器中使用 unique_ptr 的透明方法?

    有没有透明的使用方式std unique ptr在容器中 include
  • 如何在同一台机器上运行 2 个(或更多)Wildfly 实例?

    我想通过运行 2 个独立的 Wildfly 实例来模拟 2 个服务器 当您不想在同一个实例上部署所有 WAR 然后只能将它们关闭并一起启动时 这非常有用 我正在将 Eclipse 与 JBoss 插件一起使用 在服务器视图中 我希望有 2
  • 在java Swing中创建带有递增和递减按钮的数字文本框

    如何在 java swing 中创建一个数字文本框 它有两个按钮 向上和向下 分别递增和递减文本框中的值 此文本框也必须可编辑仅数字值 像这样的东西 我尝试在文本框附近放置两个按钮 然后在单击按钮时手动执行操作 有没有其他方法可以更好地做到
  • Listbox手动DrawItem大字体

    我正在尝试绘制末端是一个的项目 红色字符 并将其删除 字符 并用黑色绘制其他项目 这是我的代码 private void listBox1 DrawItem object sender DrawItemEventArgs e e DrawB
  • 具有相反结合顺序的 C++ 重载运算符

    很难想出一个标题 我的母语不是英语 struct A int value A operator int i const A a a value value i return a int main A a a value 2 a a 2 re

随机推荐

  • 【问题】BurpSuite,捕捉不到Chrome浏览器上DVWA的请求

    问题 搭建DVWA后 http 127 0 0 1 DVWA setup php 配置后Burp Suite捕捉不到DVWA请求 解决 获取本机IP 用本机IP请求 http 192 168 126 1 DVWA setup php 然后就
  • Wonderful Coloring - 1

    题目 题目链接 题解 include
  • 树莓派的网络连接错误

    当用电脑直连树莓派的时候 点击树莓派的网络连接的时候一直显示 eth0 link is up configuring 链接已打开 正在配置 然而打开树莓派终端的时候敲命令ifconfig又显示地址 估计大家都遇到过很多问题 这是为什么呢 首
  • Qlik Sense 移动端安装配置

    在之前的文章中 我们了解到Qlik Sense是一款数据分析可视化的应用 使人们能够轻松地组合来自许多不同来源的数据 并自由探索 而不受基于查询的工具的限制 不仅支持Web端访问 还有配套的Windows Desktop使用 那么移动端是否
  • 一点逻辑

    1 前传 80年代 改革开放初期 中央政府没钱 地方政府没钱 企业没钱 老百姓没钱 农村有家庭联产承包责任制 城市咋办 经济学者厉以宁号称厉股份 给出了一个建议 人们自筹资金入股 成立股份制企业 老百姓没钱 没钱也能挤出牙缝钱 所以中国第一
  • QT 信号和槽传递自定义对象问题

    QT 如果直接传递自定义的对象会报错导致信号和槽无法连接成功 这里提供两种方法解决 1 传递对象指针 信号和槽在传递自定义对象时 改为传对象指针 2 使用 qRegisterMetaType 将对象注册为元类型 使用qRegisterMet
  • 大型游戏动作竞技游戏开发和体感VR/AR游戏开发:创造引人入胜的虚拟世界

    大型游戏动作竞技游戏和体感VR AR游戏都代表了游戏开发领域的最新趋势 它们提供了高度沉浸式的娱乐体验 结合了视觉 听觉和体感互动 在本文中 我们将探讨如何开发这两种类型的游戏 并介绍其关键特点和开发流程 大型游戏动作竞技游戏的特点 高品质
  • 秋招面经汇总(算法工程师,计算机视觉工程师,深度学习工程师,机器学习工程师)

    前言 随着高通的正式offer下来 基本上秋招结束了 剩下的就是一些三方和合同处理的事情 我的秋招从8月开始准备 到10月末 后面有可能再随便考一下省考选调什么的 体验一下 背景是广东工业大学本硕 1 7月份在某公司的研究院实习 有一篇SC
  • flutter ios webview不能打开http地址

    参考 1 iOS添加信任 webview flutter 在使用过程中会iOS出现无法加载HTTP请求的情况 但是Flutter 却可以加载HTTP请求 这就与两个的框架有关了 Flutter是独立于UIKit框架的 解决方案就是在iOS
  • Sql Server 增加字段、修改字段、修改类型、修改默认值

    原文 Sql Server 增加字段 修改字段 修改类型 修改默认值 1 修改字段名 alter table 表名 rename column A to B 2 修改字段类型 alter table 表名 alter column 字段名
  • cv2,Image,Tensor图像shape中hw顺序

    经常忘记h和w的顺序 这次记录一下 图像为h 1000 w 1700 从结果可以看到 Image比较特殊 是w h cv2的resize中的dsize也是w h img Image open 001 png print img size w
  • 数据库系统概念复习

    第2章 关系模型介绍 zcy 2021 5 10 2 1 关系型数据库的结构 关系 relation 表 元组 tuple 行 属性 attribute 列 域 domin 对于关系的每个属性 都存在一个允许取值的集合 关系的所有属性的域都
  • 关于华为--公司概况

    关于华为 公司概况 华为技术有限公司成立于1988年 专门从事通信网络技术与产品的研究 开发 生产与销售 致力于为电信运营商提供固定网 移动网 数据通信网和增值业务领域的网络解决方案 是中国电信市场的主要供应商之一 并已成功进入全球电信市场
  • Python Tkinter Gui 常用组件介绍 基本使用

    Python Tkinter Gui 窗口图标 标签 输入 单复选 文件导入 按钮 日志 等常用组件 基本使用 文章目录 Python Tkinter Gui 窗口图标 标签 输入 单复选 文件导入 按钮 日志 等常用组件 基本使用 TOC
  • 三、伊森商城 快速开发 配置&测试微服务基本CRUD功能 p12

    目录 一 商品服务整合MyBatis Plus 1 导入依赖 上一章已经在common导入过 2 配置数据源 2 1 导入数据库的驱动 2 2 配置application yml 2 2 配置MyBatis Plus 2 2 1 使用 Ma
  • java上传图片到阿里云oss云存储中,返回url链接地址

    前言 最近要做一个门户网站 图片较多 所以要采用图片服务器 我这里采用的是阿里云的oss云存储 1 个数无限制 2 阿里云备份3 性能也不错 oss对于图片的处理 也有api 但是我这里上传的图片只需要加个水印 所以只需要在oss那边设置一
  • TextView设置android:textAllCaps="true"带来的问题

    刚刚碰到一个问题 记录一下
  • Ubuntu20.04安装英伟达驱动步骤

    先给电脑修改tty配置 保证黑屏后能打开tty 问题收录 Ubuntu14 04无法进入到tty1 6的解决办法 tty1到tty6 君的名字的博客 CSDN博客 关键 使电脑开机后出现grub引导界面 因为后面会出现开机黑屏的情况 所以需
  • Linux校验和

    校验和checksum程序可以生成文件的校验和 通过校验和即可检验文件的完整性 生成文件的MD5sum student myhost md5sum a 9f96ef92fe742165873c313662f1f2b8 a 以上生成了32位1
  • DAO层演练代码

    part 1 原始版 public class JDBCUtil 获取连接操作 return throws Exception public static Connection getConnection throws Exception