BaseJDBC和CRUDDAO的写法实例代码

发布时间 - 2026-01-11 03:21:23    点击率:

我们首先看下BASEJDBC的写法实例:

package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Driver;
public class BaseJDBC {
 // 表示你要操作的是哪种类型的数据库
 private final String DRIVER = "com.mysql.jdbc.Driver";
 // 表示你要连接的是哪一台电脑的服务器端口号是多少数据库的名字是什么
 private final String URL = "jdbc:mysql://localhost:3306/zzy";//有时这里需要加上字符集
 // 登录数据库的用户名
 private final String USERNMAE = "root";
 // 登录数据库的密码
 private final String PASSWORD = "root";
 /**
  * 注册驱动 获取连接
  * 
  * @return
  */
 public Connection getConnection() {
  try {
   //Driver d=new Driver();
   // 注册驱动:反射(是一项很高深的技术)
   Class.forName(DRIVER);
   // 由连接大管家创建连接对象
   return DriverManager.getConnection(URL, USERNMAE, PASSWORD);
  } catch (ClassNotFoundException e) {
   //e.printStackTrace("数据库的驱动文件没有找到");
  } catch (SQLException e) {
   //数据库的连接错误
   e.printStackTrace();
  }
  return null;
 }
 /**
  * 关闭连接释放资源
  * @param con
  * @param st
  * @param rt
  */
 public void closeAll(Connection con, Statement st, ResultSet rt) {
  try {
   if (rt != null) {
    rt.close();
    rt = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  try {
   if (st != null) {
    st.close();
    st = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  try {
   if (con != null) {
    con.close();
    con = null;
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}

CRUDDAO 写法代码实例:

package com.dao;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.*;
import java.util.Map.Entry;
/**
 * 
 * @author zzy
 *
 * 2016年12月1日下午1:49:49
 */
public class CRUDDAO<T> extends BaseJDBC {
 private Connection con = null;
 private PreparedStatement pt = null;
 private Statement st = null;
 private ResultSet rt = null;
 private Class<T> c;
 public CRUDDAO() {
 }
 public CRUDDAO(Class<T> c) {
  this.c = c;
 }
 /**
  * 查询操作要改造的地方 第一:参数必须抽象 第二:返回类型必须抽象
  * 
  * @param <T>
  * @param <T>
  * 
  * @return Map<Integer, List<T>>
  */
 public Map<Integer, List<T>> selectAll(Map<String, Object[]> m) {
  int index = 0;
  Map<Integer, List<T>> map = new LinkedHashMap<Integer, List<T>>();
  List<T> list = null;
  try {
   con = super.getConnection();
   if (con != null) {
    Set<Entry<String, Object[]>> set = m.entrySet();
    for (Entry<String, Object[]> entry : set) {
     list = new ArrayList<T>();
     pt = con.prepareStatement(entry.getKey());
     this.bind(entry.getValue());
     rt = pt.executeQuery();
     while (rt.next()) {
      list.add(this.toBean2());
     }
     map.put(++index, list);
    }
   } else {
    System.out.println("数据库连接失败");
   }
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   super.closeAll(con, pt, rt);
  }
  return map;
 }
 /**
  * 将数据库查询到的数据进行封装 封装成实体类之后再返回给调用者
  * 
  * @return
  */
 private T toBean() {
  T t = null;
  try {
   t = c.newInstance();
   Method[] m = c.getMethods();
   ResultSetMetaData rmt = rt.getMetaData();
   for (int i = 1, count = rmt.getColumnCount(); i <= count; i++) {
    String columName = rmt.getColumnName(i);
    columName = "set" + columName.substring(0, 1).toUpperCase()
      + columName.substring(1);
    for (int j = 0; j < m.length; j++) {
     if (columName.equals(m[j].getName())) {
      m[j].invoke(t, rt.getObject(i));
      break;
     }
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 private T toBean2() {
  T t = null;
  try {
   // 创建反射类的实例
   t = c.newInstance();
   // 反射出所有字段
   Field[] field = c.getDeclaredFields();
   for (Field f : field) {
    // 根据反射的字段名得到数据库中的字段值
    Object value = rt.getObject(f.getName());
    f.setAccessible(true);// 打开私有字段的操作权限
    f.set(t, value);// 调用这个字段的公有的set方法封装字段的值
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  return t;
 }
 /**
  * 绑定参数
  * 
  * @param obj
  */
 private void bind(Object[] obj) {
  try {
   if (obj != null) {
    for (int i = 0, k = obj.length; i < k; i++) {
     pt.setObject(i + 1, obj[i]);
    }
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 /**
  * 修改操作 进行的事务的控制 所有命令要么同时提交成功 要么同时回滚
  * 
  * @param name
  * @param id
  * @return
  */
 public int[] updateAll(Map<String, Object[]> map) {
  int[] row = new int[map.size()];
  int index = 0;
  int error = 0;
  try {
   con = super.getConnection();
   if (con != null) {
    Set<Entry<String, Object[]>> set = map.entrySet();
    // 关闭连接对象的自动提交的功能
    con.setAutoCommit(false);
    for (Entry<String, Object[]> entry : set) {
     pt = con.prepareStatement(entry.getKey());
     this.bind(entry.getValue());
     row[index] = pt.executeUpdate();
     if (row[index] == 0) {
      throw new Exception("修改失败,数据回滚!");
     }
     index++;
    }
   } else {
    System.out.println("数据库连接失败");
   }
  } catch (Exception e) {
   error++;
   e.printStackTrace();
  } finally {
   if (error > 0) {
    try {
     // 将前面已经执行的命令回滚
     con.rollback();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   } else {
    try {
     // 全部提交
     con.commit();
    } catch (SQLException e) {
     e.printStackTrace();
    }
   }
   super.closeAll(con, st, null);
  }
  return row;
 }
}

总结

以上就是本文关于BaseJDBC和CRUDDAO的写法实例代码的全部内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# BaseJDBC  # 写法  # CRUDDAO  # 简单通用JDBC辅助类封装(实例)  # Java原生操作JDBC连接以及原理详解  # 将原生JDBC封装实现CRUD的案例  # 的是  # 你要  # 在此  # 很高  # 射出  # 没有找到  # 数据库中  # 绑定  # 小编  # 给我留言  # 感谢大家  # 端口号  # 数据库查询  # 疑问请  # 有任何  # 字段名  # 大管家  # 下午  # 哪种类型  # 是一项 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Android滚轮选择时间控件使用详解  如何为不同团队 ID 动态生成多个独立按钮  ,南京靠谱的征婚网站?  网站制作报价单模板图片,小松挖机官方网站报价?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  使用C语言编写圣诞表白程序  Laravel API资源类怎么用_Laravel API Resource数据转换  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  北京企业网站设计制作公司,北京铁路集团官方网站?  如何用美橙互联一键搭建多站合一网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  手机软键盘弹出时影响布局的解决方法  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  JS实现鼠标移上去显示图片或微信二维码  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  海南网站制作公司有哪些,海口网是哪家的?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何用腾讯建站主机快速创建免费网站?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  JavaScript如何实现继承_有哪些常用方法  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel如何创建自定义中间件?(Middleware代码示例)  新三国志曹操传主线渭水交兵攻略  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  大同网页,大同瑞慈医院官网?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel如何生成API文档?(Swagger/OpenAPI教程)  如何快速查询网站的真实建站时间?  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  高性能网站服务器部署指南:稳定运行与安全配置优化方案  网站建设要注意的标准 促进网站用户好感度!  深圳网站制作平台,深圳市做网站好的公司有哪些?  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  制作电商网页,电商供应链怎么做?