利用反射和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的方法. 代码 自定义注解 ...
随机推荐
- Tomcat Getshell
安装环境 账号密码路径:Tomcat6.0/conf/tomcat-users.xml 弱口令扫描工具 后台默认登陆地址:html://xx.xx.xx.xx/manager/html 后台war f ...
- Java 常用知识点
Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...
- 同时使用antd和css module
同时编译antd和css module,需要设置两次less识别. { test: /\.less$/, exclude: path.resolve(__dirname, './node_module ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十课 深入应用异步和协程(课堂笔记)
tornado 相关说明 需求: 增加 /save 的 handler,实现异步保存指定 URL 图片的功能 从网页上得到一张图片地址,由这个地址将图片保存到服务器,并将相关数据保存到数据库 impo ...
- C# Winform控件 - Form
一.Form窗体样式 1.FormBorderStyle (1)None (2)FixedSingle (3)Fixed3D 个人感觉跟Fixedsingle区别不大 (4)FixedDialog 不 ...
- Android ble蓝牙问题
(1)蓝牙回调安卓4.4的蓝牙回调是在异步线程中(不在主线程),若要在蓝牙回调中执行更新界面的操作,记得切换到主线程去操作 (2)三星手机兼容性问题connectGatt()方法在某些三星手机上只能在 ...
- Phone List 字典树 OR STL
Phone List Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 140 Solved: 35 Description ...
- poj1207 3n+1 problem
The 3n + 1 problem Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 60496 Accepted: 19 ...
- wamp 环境安装php_mongo 或 mongodb的扩展
特别注意:momgo 与mondb 是两个不同的扩展,不是同一个,这是一个坑 1.查看你的php版本,Compiler,Thread safety版本 2.下载地址 https://pecl.php. ...
- JavaScript开发者应懂的33个概念
简介 这个项目是为了帮助开发者掌握 JavaScript 概念而创立的.它不是必备,但在未来学习(JavaScript)中,可以作为一篇指南. 本篇文章是参照 @leonardomso 创立,英文版项 ...