Java_jdbc 基础笔记之十三 数据库连接(DAO)
来源:互联网 发布:单片机lcd液晶显示 编辑:程序博客网 时间:2024/05/16 03:36
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); }}
0 0
- Java_jdbc 基础笔记之十三 数据库连接(DAO)
- Java_jdbc 基础笔记之三 数据库连接 (Statement)
- Java_jdbc 基础笔记之四 数据库连接 (通用更新方法)
- Java_jdbc 基础笔记之五 数据库连接 (ResultSet)
- Java_jdbc 基础笔记之六 数据库连接 (PreparedStatement)
- Java_jdbc 基础笔记之七 数据库连接(方法升级)
- Java_jdbc 基础笔记之十 数据库连接 (ResultSetMetaData 类)
- Java_jdbc 基础笔记之十二 数据库连接 (beanutils )
- Java_jdbc 基础笔记之十四 数据库连接(元数据)
- Java_jdbc 基础笔记之二 数据库连接
- Java_jdbc 基础笔记之一 数据库连接
- Java_jdbc 基础笔记之八 数据库连接(写一个查询Student对象的方法)
- Java_jdbc 基础笔记之九 数据库连接 (查询Customer对象的方法)
- Java_jdbc 基础笔记之十一数据库连接 (通用的查询方法)
- Java_jdbc 基础笔记之十五 数据库连接(取得数据库自动生成的主键)
- java_jdbc基础笔记
- Java_JDBC 数据库连接接口
- javascript基础笔记(十三)之Math对象
- 相似图片搜索的原理(二)
- C++实现顺序表
- 解决 驱动创建设备节点时 权限为 root只读只写 的问题
- Minimum Path Sum
- C++Primer第五版 1.4.4节练习
- Java_jdbc 基础笔记之十三 数据库连接(DAO)
- 汇编语言基础学习
- 轻量级.Net开源日志组件--AHCT.Log.NLogger
- java中对象的理解
- Pixel binning
- Tomcat搭建资源服务器
- hibernate中对象的三种状态分析
- 树状数组(一)
- C++ Primer Plus 第6版 中文版 第6章编程练习