我们首先看下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的案例
# 的是
# 你要
# 在此
# 很高
# 射出
# 没有找到
# 数据库中
# 绑定
# 小编
# 给我留言
# 感谢大家
# 端口号
# 数据库查询
# 疑问请
# 有任何
# 字段名
# 大管家
# 下午
# 哪种类型
# 是一项
相关文章:
宝塔建站后网页无法访问如何解决?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何快速生成专业多端适配建站电话?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
网站代码制作软件有哪些,如何生成自己网站的代码?
如何快速查询网站的真实建站时间?
,怎么在广州志愿者网站注册?
如何在景安云服务器上绑定域名并配置虚拟主机?
定制建站策划方案_专业建站与网站建设方案一站式指南
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
如何快速查询域名建站关键信息?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何通过免费商城建站系统源码自定义网站主题与功能?
公司网站的制作公司,企业网站制作基本流程有哪些?
如何正确下载安装西数主机建站助手?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
建站主机服务器选型指南与性能优化方案解析
孙琪峥织梦建站教程如何优化数据库安全?
如何高效配置IIS服务器搭建网站?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
表情包在线制作网站免费,表情包怎么弄?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
c# 服务器GC和工作站GC的区别和设置
宝塔面板如何快速创建新站点?
php json中文编码为null的解决办法
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
怎么将XML数据可视化 D3.js加载XML
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站VPS选购需注意哪些关键参数?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何访问已购建站主机并解决登录问题?
油猴 教程,油猴搜脚本为什么会网页无法显示?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何确保FTP站点访问权限与数据传输安全?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
制作企业网站建设方案,怎样建设一个公司网站?
已有域名和空间如何搭建网站?
股票网站制作软件,网上股票怎么开户?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站之星如何配置系统实现高效建站?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
智能起名网站制作软件有哪些,制作logo的软件?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
网站设计制作企业有哪些,抖音官网主页怎么设置?
*请认真填写需求信息,我们会在24小时内与您取得联系。