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)的更多相关文章

  1. Java_jdbc 基础笔记之二 数据库连接

    /** * DriverManager 类是驱动程序管理器类 * 1)可以通过重载的getConnection()方法获取数据库的连接,较为方便 * 2)可以同时管理多个驱动程序:若注册了多个数据库连 ...

  2. Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)

    鉴于之前的查询方法,在这里我们可以写一个通用的方法 /** * 鉴于 student.和customer查询的方法有好多相同之处,在此可以写一个通用的方法 */ public <T> T ...

  3. Java_jdbc 基础笔记之十 数据库连接 (ResultSetMetaData 类)

    ResultSetMetaData 类 调用ResultSet 的getMetaData()方法得到ResultSetMetaData 类对象: 可用于获取关于 ResultSet 对象中列的类型和属 ...

  4. Java_jdbc 基础笔记之九 数据库连接 (查询Customer对象的方法)

    /** * * 写一个查询Customer对象的方法 * */ public Customer getCustomer(String sql, Object... args) { Customer c ...

  5. Java_jdbc 基础笔记之一 数据库连接

    方式一: 1.创建一个Driver实现类的对象 2.准备连接数据库的基本信息:url,user,password 3.调用Driver接口的connect(url,info)获取数据库连接 * Dri ...

  6. Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)

    public class testGetKeyValue { /** * 取得数据库自动生成的主键 */ @Test public void testGeneratedKeys() { Connect ...

  7. Java_jdbc 基础笔记之十四 数据库连接(元数据)数据库信息及连接信息

    public class MetaDatatest { /** * DatabaseMetaData 是描述 数据库的元数据对象 可以由Connection得到 */ @Test public voi ...

  8. Java_jdbc 基础笔记之十二 数据库连接 (beanutils )

    public class BeanUtilsTest { /** * Java 类的属性: * 1.在JavaEE中,Java类的属性通过getter,setter来定义: get,set方法,去除 ...

  9. Java_jdbc 基础笔记之八 数据库连接(写一个查询Student对象的方法)

    public Student getStudent(String sql, Object... args) { // 查询Student对象 Student stu = null; Connectio ...

随机推荐

  1. dexlib2的源码框架

    这个是dexlib2的目录,明显看出来比baksmali和smali代码量要多很多,这里先将核心目录给大家做一下介绍 analysis 这个暂时不知道具体作用 base     这个文件夹下面全部都是 ...

  2. 【数据泵】EXPDP导出表结构

    [数据泵]EXPDP导出表结构(真实案例) BLOG文档结构图         因工作需要现需要把一个生产库下的元数据(表定义,索引定义,函数定义,包定义,存储过程)导出到测试库上,本来以为很简单的, ...

  3. springboot + 自定义配置文件读取

    新建一个配置文件 src\main\resources\resources\config.properties #自定义配置文件 #System Encoding #File Upload Temp ...

  4. Python标准库-数字的处理函数(math模块)

    Python标准库-数字的处理函数(math模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. #!/usr/bin/env python #_*_conding:utf-8_* ...

  5. 视图查询的数据和sql查询的数据不一样

    视图查询的数据和sql查询的数据不一样. 手动刷新视图 exec sp_refreshview  视图名称

  6. 我感觉这个书上的微信小程序登陆写得不好

    基本功能是OK,但是感觉传的数据太多,不安全,需要改写. App({ d: { hostUrl: 'http://www.test.com/index.php', //请填写您自己的小程序主机URL ...

  7. c++控制输出的字体颜色

    SetConsoleTextAttribute(参数表).SetConsoleTextAttribute()函数是一个API设置字体颜色和背景色的函数.参数表中使用两个属性(属性之间用,隔开).Get ...

  8. Python 多版本安装模块

    自己安装的是 3.7.3 版本的,但是在安装其他软件的时候自带有Python,但是版本都不一样,有2.7的有3.7的. 自己平时用没有问题,配置的环境都是自己的 3.7.3 的,在用其他软件的Pyth ...

  9. js判断是否第一次访问跳转

    今天分享一套关于Js劫持代码,进行判断第一次访问进行跳转,仅供大家参考学习! 未加密: if (c.indexOf('isfirstvisited=false') != -1) { } else { ...

  10. 使用selenium谷歌浏览器驱动配置:

    from selenium import webdriver#导入谷歌浏览器的chrome_driverchrome_driver = r"C:\python36\Lib\site-pack ...