package com.at221.jdbc;

 import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties; import com.mysql.jdbc.Connection; public class JDBCTools {
public static void release(Statement sta,java.sql.Connection con,ResultSet rs){
if(sta != null){
try{
sta.close();
}catch(Exception e){
e.getStackTrace();
}
} if(con != null){
try{
con.close();
}catch(Exception e){
e.getStackTrace();
}
} if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } public static void release(Statement sta,java.sql.Connection con){
if(sta != null){
try{
sta.close();
}catch(Exception e){
e.getStackTrace();
}
} if(con != null){
try{
con.close();
}catch(Exception e){
e.getStackTrace();
}
} } public static Connection getConnec() throws SQLException, IOException, ClassNotFoundException,
InstantiationException, IllegalAccessException{
String driverClass = null;
String jdbcUrl = null;
String user = null;
String password = null; //利用配置文件,来更改数据库的配置
InputStream is = JDBCTools.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties p = new Properties();
p.load(is);
driverClass = p.getProperty("driver");
// System.out.println(driverClass); jdbcUrl = p.getProperty("jdbcUrl");
// System.out.println(jdbcUrl); user = p.getProperty("user");
// System.out.println(driverClass); password = p.getProperty("password");
// System.out.println(password); Properties info = new Properties();
info.put("user", user);
info.put("password", password);
DriverManager.registerDriver((Driver)Class.forName(driverClass).newInstance()); Connection connec = (Connection)DriverManager.getConnection(jdbcUrl, user, password);
// System.out.println(connec);
return connec;
}
} package com.at221.jdbc; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Map; import org.junit.Test; import com.mysql.jdbc.ResultSetMetaData; public class TestReflection {
@Test
public void test(){
String sql = "SELECT id Id,name Name,birth Birth,email Email from student where id = ?";
Student s = (Student)getStudent(Student.class,sql,3);
System.out.println(s);
}
public <T> Object getStudent(Class<T> clazz,String sql,Object ... args ){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;
T entity = null;
try {
//1.SQL语句进行配置
conn = JDBCTools.getConnec();
ps = conn.prepareStatement(sql);
//①给SQL语句中的通配符赋值 for(int i = 0; i < args.length; i++){
ps.setObject(i+1, args[i]);
}
//②利用SQL进行查询得到结果集
rs = ps.executeQuery();
//2.创建类的对象
entity = clazz.newInstance();
//3.利用jdbc元数据来获得列的别名,为map中的键值对进行赋值
rsmd = (ResultSetMetaData)rs.getMetaData(); Map<String, Object> value = new HashMap<String, Object>();
if(rs.next()){
for(int i = 0; i < rsmd.getColumnCount(); i++){
String key = rsmd.getColumnLabel(i+1);
Object obj = rs.getObject(i+1);
value.put(key, obj);
}
}
//4.利用得到的map进行对创建的对象进行赋值
if(value.size() > 0){
for(Map.Entry<String, Object> entry : value.entrySet()){
String column = entry.getKey();
Object columnValue = entry.getValue();
RecflectionUtils.setFieldValue(entity, column, columnValue);
}
} } catch(Exception e){
e.printStackTrace();
}finally {
JDBCTools.release(ps, conn); }
return entity;
}
} package com.at221.jdbc; import java.sql.Date; public class Student {
private int id;
private String name = null;
private Date birth = null;
private String email = null; public Student(int id, String name, Date birth, String email) {
super();
this.id = id;
this.name = name;
this.birth = birth;
this.email = email;
} public Student() {
super();
} public int getId() {
return id;
} public void setId(Integer id) {
this.id = id.intValue();
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name
+ ", birth=" + birth + ", email=" + email + "]";
} }

利用反射和JDBC元数据实现更加通用的查询方法的更多相关文章

  1. JDBC课程5--利用反射及JDBC元数据(ResultSetMetaData)编写通用的查询方法

    /**-利用反射及JDBC元数据编写通用的查询方法 * 1.先利用SQl语句进行查询,得到结果集--> * 2.查找到结果集的别名:id--> * 3.利用反射创建实体类的对象,创建aut ...

  2. JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法

    JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 * 可以由Connection得到 */ 具体的应用代码: @Te ...

  3. 【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法

    转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 ...

  4. Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法

    先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 ...

  5. <五>JDBC_利用反射及JDBC元数据编写通用的查询方法

    此类针对javaBean类写了一个通用的查询方法,List<javaBean> 通用查询更新中...:通过学习,深刻体会到学会反射就等于掌握了java基础的半壁江山! 一.使用JDBC驱动 ...

  6. MYSQL 之 JDBC(六): 增删改查(四)利用反射及JDBC元数据编写通用的查询

    1.先利用SQL进行查询,得到结果集2.利用反射创建实体类的对象:创建Student对象3.获取结果集的列的别名:idCard.studentName4.再获取结果集的每一列的值,结合3得到一个Map ...

  7. 利用反射及jdbc元数据实现通用的查询方法

    ---------------------------------------------------------------------------------------------------- ...

  8. 利用反射及JDBC元数据编写通用查询方法

    元数据:描述数据的数据,ResultSetMetaData是描述ResultSet的元数据对象,从它可以得到数据集有多少了,每一列的列名... ResultSetMetaData可以通过ResultS ...

  9. 利用反射跟自定义注解拼接实体对象的查询SQL

    前言 项目中虽然有ORM映射框架来帮我们拼写SQL,简化开发过程,降低开发难度.但难免会出现需要自己拼写SQL的情况,这里分享一个利用反射跟自定义注解拼接实体对象的查询SQL的方法. 代码 自定义注解 ...

随机推荐

  1. (一)shell脚本入门

    shell脚本入门 1.脚本格式 脚本以#!/bin/bash 开头(指定解析器) 2.第一个shell脚本:helloworld (1)需求:创建一个shell脚本,输出helloworld 运行: ...

  2. 自定义PlantUML和C4 Model样式

    什么是PlantUml PlantUml是一个支持快速绘制的开源项目.其定义了一套完整的语言用于实现UML关系图的描述.并基于强大的graphviz图形渲染库进行UML图的生成.绘制的UML图还可以导 ...

  3. c#堆与栈

    一.在讲堆栈之前,我们先看看值类型和引用类型: 1,我们看看值类型与引用类型的存储方式: 引用类型:引用类型存储在堆中.类型实例化的时候,会在堆中开辟一部分空间存储类的实例.类对象的引用还是存储在栈中 ...

  4. Hadoop Yarn 框架原理及运作机制及与MapReduce比较

    Hadoop 和 MRv1 简单介绍 Hadoop 集群可从单一节点(其中所有 Hadoop 实体都在同一个节点上运行)扩展到数千个节点(其中的功能分散在各个节点之间,以增加并行处理活动).图 1 演 ...

  5. .net程序员面试小结(内附一些面试题和答案)

    今天下午去面试,面试官和HR小姐姐都很好,没有做面试题,用聊天的方式来交流技术,整个过程很轻松,从中也学到了很多知识. 下面就来总结一下面试过程. 一.深刻了解自己的简历 无论是HR还是技术面试人,首 ...

  6. BZOJ.3566.[SHOI2014]概率充电器(概率DP 树形DP)

    BZOJ 洛谷 这里写的不错,虽然基本还是自己看转移... 每个点的贡献都是\(1\),所以直接求每个点通电的概率\(F_i\),答案就是\(\sum F_i\). 把\(F_x\)分成:父节点通电给 ...

  7. Chapter 4 : Control Structures 1 : Selection

    Although it need not be, the expression is usually an identifier. Whether it is an identifieror an e ...

  8. 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数。

    问题: 给出两个单词word1和word2,写一个函数计算出将word1 转换为word2的最少操作次数. 你总共三种操作方法: 1.插入一个字符 2.删除一个字符 3.替换一个字符 格式: 输入行输 ...

  9. docker上配置mysql主从复制

    1.在docker上启动2台mysql容器:(这里3306为主,3307为从) docker run -d  -e MYSQL_ROOT_PASSWORD=123456  -p 3306:3306 - ...

  10. springboot+rediscluster

    @EnableCaching @Configuration public class RedisConfiguration extends CachingConfigurerSupport { @Au ...