利用反射和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的方法. 代码 自定义注解 ...
随机推荐
- FLASK 的Session和MoudelForm插件
falsk是小而精的框架,但是热度高, 所有很多爱好者提供了很多扩展插件 功能强大,美而不足的就是兼容稳定性有时候不太好,不过大部分还是很可以的 Flask-Session flask内置sessio ...
- ARC 103
目录 官方题解 C 官方题解 C 这道题教会了我怎样正确统计众数和第二众数........... 我之前的方法是错的 #include <bits/stdc++.h> using name ...
- nexus的jar包上传与下载
1. hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库. Snapshots 公司内部测试版本仓库 2. p ...
- __x__(49)0910第六天__命名规范
id class 命名规范: 小驼峰命名法: aaaBbbCcc,helloWorld 大驼峰命名法: AaaBbbCcc,HelloWorld 匈牙利命名法: 类型+描述 formUserName, ...
- Nginx配置:nginx如何配置跳转fpm
location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_inf ...
- Oracle 11g修改字符集
选择静默安装的安装字符集为默认的ZHS16GBK,工作中字符集为为AL32UTF8 一.登录oracle sqlplus / as sysdba shutdown immediate; STARTUP ...
- 微信小程序计算经纬距离
微信小程序计算经纬距离 微信小程序计算两点间的距离 getDistance: function (lat1, lng1, lat2, lng2) { lat1 = lat1 || 0; lng1 = ...
- PHP算法学习(8) 环形链表 解决约瑟夫问题
2019年2月25日17:29:17 Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆圈 ...
- 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析 Week6 20165311
2018-2019 20165311 网络对抗 Exp4 恶意代码分析 2018-2019 20165311 网络对抗 Exp4 恶意代码分析 实验内容 系统运行监控(2分) 恶意软件分析(1.5分) ...
- 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息
最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...