Java_jdbc 基础笔记之十三 数据库连接(DAO)
public class DAO {
// INSERT, UPDATE, DELETE 操作都可以包含在其中
public void update(String sql, Object... args) {
Connection conn = null;
PreparedStatement ps = null;
try {
conn = JDBCTools.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.close(null, ps, conn);
}
}
// 查询一条记录, 返回对应的对象
public <T> T get(Class<T> clazz, String sql, Object... args) {
T entity = null;
// 1获取Connection
Connection conn = null;
// 2 获取PreparedStatement
PreparedStatement ps = null;
// 3填充占位符
ResultSet rs = null;
try {
conn = JDBCTools.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
// 4 进行查询得到rs
rs = ps.executeQuery();
// 5若 ResultSet中有记录,
// 准备一个MAP 键:存放列的别名,值:存放列的值
Map<String, Object> values = new HashMap<String, Object>();
// 6得到ResultSetMetaData对象
ResultSetMetaData rmsd = rs.getMetaData();
// 7处理ResultSet,把指针向下移动一个单位
if (rs.next()) {
// 8 由ResultSetMetaData 对象得到结果集中有多少列
for (int i = 0; i < rmsd.getColumnCount(); i++) {
// 9由ResultSetMetaData得到每一列的别名,由rs得到每一列的值
String columnLabel = rmsd.getColumnLabel(i + 1);
Object columnValue = rs.getObject(i + 1);
// 10 填充Map
values.put(columnLabel, columnValue);
}
}
if (values.size() > 0) {
// 11 用反射创建Class对应的对象
entity = clazz.newInstance();
// 12 遍历Map对象,用反射填充对象的属性值:
// 属性名为Map中的key 属性值为Map中的value
for (Map.Entry<String, Object> map : values.entrySet()) {
String fieldName = map.getKey();
Object fieldValue = map.getValue();
BeanUtils.setProperty(entity, fieldName, fieldValue);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.close(rs, ps, conn);
}
return entity;
}
}
public class DAOTest {
DAO dao = new DAO();
@Test
public void testUpdate() {
String sql = "INSERT INTO customers(name,email,birth)VALUES(?,?,?)";
dao.update(sql, "XiaoWang", "XiaoWang@guigu.com", new Date(
new java.util.Date().getTime()));
}
@Test
public void testGet() {
String sql="SELECT flow_id flowId, type, id_card iDCard, "
+ "exam_card examCard, student_name studentName, "
+ "location, grade " + "FROM examstudent WHERE flow_id = ?";
Student stu=dao.get(Student.class, sql, 9);
System.out.println(stu);
}
}
转: https://blog.csdn.net/YL1214012127/article/details/48350107
Java_jdbc 基础笔记之十三 数据库连接(DAO)的更多相关文章
- Java_jdbc 基础笔记之二 数据库连接
/** * DriverManager 类是驱动程序管理器类 * 1)可以通过重载的getConnection()方法获取数据库的连接,较为方便 * 2)可以同时管理多个驱动程序:若注册了多个数据库连 ...
- Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)
鉴于之前的查询方法,在这里我们可以写一个通用的方法 /** * 鉴于 student.和customer查询的方法有好多相同之处,在此可以写一个通用的方法 */ public <T> T ...
- Java_jdbc 基础笔记之十 数据库连接 (ResultSetMetaData 类)
ResultSetMetaData 类 调用ResultSet 的getMetaData()方法得到ResultSetMetaData 类对象: 可用于获取关于 ResultSet 对象中列的类型和属 ...
- Java_jdbc 基础笔记之九 数据库连接 (查询Customer对象的方法)
/** * * 写一个查询Customer对象的方法 * */ public Customer getCustomer(String sql, Object... args) { Customer c ...
- Java_jdbc 基础笔记之一 数据库连接
方式一: 1.创建一个Driver实现类的对象 2.准备连接数据库的基本信息:url,user,password 3.调用Driver接口的connect(url,info)获取数据库连接 * Dri ...
- Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)
public class testGetKeyValue { /** * 取得数据库自动生成的主键 */ @Test public void testGeneratedKeys() { Connect ...
- Java_jdbc 基础笔记之十四 数据库连接(元数据)数据库信息及连接信息
public class MetaDatatest { /** * DatabaseMetaData 是描述 数据库的元数据对象 可以由Connection得到 */ @Test public voi ...
- Java_jdbc 基础笔记之十二 数据库连接 (beanutils )
public class BeanUtilsTest { /** * Java 类的属性: * 1.在JavaEE中,Java类的属性通过getter,setter来定义: get,set方法,去除 ...
- Java_jdbc 基础笔记之八 数据库连接(写一个查询Student对象的方法)
public Student getStudent(String sql, Object... args) { // 查询Student对象 Student stu = null; Connectio ...
随机推荐
- java-java技术链接
java基础知识总结大全:https://blog.csdn.net/hao19980724/article/details/83792516 Java核心技术梳理-集合:https://mp.wei ...
- 【Docker】iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8480 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name
启动容器的时候,出现如下错误: Error response / --dport -j DNAT --to-destination ! -i docker0: iptables: No chain/t ...
- 计算机网络基础之TCP/IP 协议栈
计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...
- Python入门篇-返回值和作用域
Python入门篇-返回值和作用域 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.返回值 1>.返回值概述 Python函数使用return语句返回“返回值” 所有函数都 ...
- Tomcat+Nginx+Memcached综合案例
Tomcat+Nginx+Memcached综合案例 说明 通过Nginx解析静态页面并将动态负载均衡调度给后面的多个Tomcat,Tomcat解析java动态程序. 由于http是无状态的协议,你访 ...
- centos7 hadoop 2.8安装
安装jdk https://www.cnblogs.com/syscn/p/9975049.html 下载hadoop wget http://mirrors.tuna.tsinghua.edu.cn ...
- appium+python自动化63-使用Uiautomator2报错问题解决
前言 appium desktop V1.7.1版本使用命令行版本启动appium后,使用Uiautomator2定位toast信息报错:appium-uiautomator2-server-v0.3 ...
- 51nod1712 区间求和
http://www.51nod.com/Challenge/Problem.html#problemId=1712 先考虑题面中的简化问题. 对于\(i\in [1,n]\),\(a_i\)的贡献为 ...
- python数据可视化(一)——绘制随机漫步图
数据可视化指的是通过可视化表示来探索数据,它与数据挖掘紧密相关. python有一系列的可视化和分析工具,最流行的工具之一是matplotlib,它是一个数学绘图库. 实现绘制随机漫步图 利用ra ...
- Echo团队Alpha冲刺随笔 - 第九天
项目冲刺情况 进展 已经进入测试阶段,正在消除系统的bug 问题 通过测试,找出了系统中存在的较多bug...... 体会 测试太重要了,很多原本以为没什么bug,一测就能找到好几个,而且改个bug真 ...