利用反射和JDBC元数据实现更加通用的查询方法
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元数据实现更加通用的查询方法的更多相关文章
- JDBC课程5--利用反射及JDBC元数据(ResultSetMetaData)编写通用的查询方法
/**-利用反射及JDBC元数据编写通用的查询方法 * 1.先利用SQl语句进行查询,得到结果集--> * 2.查找到结果集的别名:id--> * 3.利用反射创建实体类的对象,创建aut ...
- JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法
JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 * 可以由Connection得到 */ 具体的应用代码: @Te ...
- 【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法
转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 ...
- Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法
先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 ...
- <五>JDBC_利用反射及JDBC元数据编写通用的查询方法
此类针对javaBean类写了一个通用的查询方法,List<javaBean> 通用查询更新中...:通过学习,深刻体会到学会反射就等于掌握了java基础的半壁江山! 一.使用JDBC驱动 ...
- MYSQL 之 JDBC(六): 增删改查(四)利用反射及JDBC元数据编写通用的查询
1.先利用SQL进行查询,得到结果集2.利用反射创建实体类的对象:创建Student对象3.获取结果集的列的别名:idCard.studentName4.再获取结果集的每一列的值,结合3得到一个Map ...
- 利用反射及jdbc元数据实现通用的查询方法
---------------------------------------------------------------------------------------------------- ...
- 利用反射及JDBC元数据编写通用查询方法
元数据:描述数据的数据,ResultSetMetaData是描述ResultSet的元数据对象,从它可以得到数据集有多少了,每一列的列名... ResultSetMetaData可以通过ResultS ...
- 利用反射跟自定义注解拼接实体对象的查询SQL
前言 项目中虽然有ORM映射框架来帮我们拼写SQL,简化开发过程,降低开发难度.但难免会出现需要自己拼写SQL的情况,这里分享一个利用反射跟自定义注解拼接实体对象的查询SQL的方法. 代码 自定义注解 ...
随机推荐
- 手机号流量统计---Mapreduce项目分析
文档显示: 每行依次是 ~手机号~上行流量~下行流量 需求分析: 需要统计各自的手机号,及上行.下行.总流量 具体做法: 1.定义map输入输出类型 通常情况下map的输入的key-value就是lo ...
- Servlet(三):生命周期、常用方法、常见错误
Servlet的生命周期:从第一次调用,到服务器关闭.如果在web.xml 中配置了load-on-startup则是从服务器开启到服务器关闭. 注意: * init方法是对Servlet进行初始化的 ...
- 第二篇flask响应方式
响应三件套 1.Flask中的HTTPResponse @app.route('/home') # app中的route装饰器 def home(): # 视图 return '登陆成功' #HTTP ...
- PHPstorm远程连接侧边栏怎么打开,远程数据库侧边栏怎么打开
- 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等
本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...
- Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)
Java并发编程系列: Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理 Java并发编程:Synchronized底层优化(轻量级锁.偏向锁) Java 并发编程 ...
- 版本管理_svn_检出_更新_提交_本机 MAC 地址_冲突
版本管理 git svn [subversion] 实现集中式的版本控制工具软件 来源于最初的工程图纸. 需求: 备份还原 协同修改 权限控制 弊端:集中式(管理方便,但是如果中心服务器瘫痪,整个开发 ...
- __x__(10)0906第三天__字符实体(转义字符)
实体:也叫转义字符,在网页中,一些类似“大于号”和“小于号”这样的字符,无法直接使用,需要用特殊的字符串来表示. 实体语法: “&实体名字;” 或者 “&实体编号;” 注意: 最好使用 ...
- 删除U8中单据已经审核完成但工作流未完成的任务
问题描述: U8工作流终审结点后面还有节点时,当终审终点完成后,系统会通知后面的节点进行审核,但单据显示已经审核完成,后面的节点无法审核,工作任务会一直挂着,无法删除. 例如下图中,节点"终 ...
- 2018-2019-2-20175303 实验一 《Java开发环境的熟悉》实验报告
2018-2019-2-20175303 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 实验1 1.用mkdir建立“20175303exp1”的目录 2.在“20175 ...