JDBC查询的通用方法

来源:互联网 发布:ubuntu开机命令行模式 编辑:程序博客网 时间:2024/05/21 11:16
package com.yanshu.util;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import org.springframework.boot.autoconfigure.session.SessionProperties.Jdbc;


import com.yanshu.pojo.Emp;


public class Test {

/**
* 通用的查询方法:可以根据传入的 SQL、Class 对象返回 SQL 对应的记录的对象
* @param clazz: 描述对象的类型
* @param sql: SQL 语句。可能带占位符
* @param args: 填充占位符的可变参数。
* @return
*/
public static <T>T findObject(Class<T> clapar,String sql,Object ...objects)
{
T entity=null;
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn=JdbcUtil.getConn();
ps=conn.prepareStatement(sql);
//可以拿出来写一个方法,直接调用
for(int i=0;i<objects.length;i++)
{
ps.setObject(i+1, objects[i]);
}
//1. 得到 ResultSet 对象
rs=ps.executeQuery();

//2. 得到 ResultSetMetaData 对象
ResultSetMetaData rsmd = rs.getMetaData();
//3. 创建一个 Map<String, Object> 对象, 键: SQL 查询的列的别名, 
//值: 列的值
Map<String, Object> map = new HashMap<>();
//4. 处理结果集. 利用 ResultSetMetaData 填充 3 对应的 Map 对象

while(rs.next())
{
for(int i=0;i<rsmd.getColumnCount();i++)
{
String columnLabel=rsmd.getColumnLabel(i+1);
/*System.out.println("刘瑞光添加到columnLabel集合中的键和值:"+columnLabel);*/
Object columnValue=rs.getObject(i+1);
map.put(columnLabel, columnValue);
}
System.out.println("刘瑞光添加到map集合中的键和值:"+map);
}
//5. 若 Map 不为空集, 利用反射创建 clazz 对应的对象

if(map.size()>0)
{
entity=clapar.newInstance();
//5. 遍历 Map 对象, 利用反射为 Class 对象的对应的属性赋值. 
for(Map.Entry<String, Object> en:map.entrySet())
{
String fieldName = en.getKey();
Object value = en.getValue();
ReflectionUtils.setFieldValue(entity, fieldName, value);
System.out.println(entity+"object1");
}
System.out.println(entity+"object2");
}



} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
JdbcUtil.closeConn(rs, null, ps, ps, conn);
}




return entity;

}




public static void main(String[] args) throws InstantiationException, IllegalAccessException {
/*String sql="select name,id from emp where id=? ";
Emp emp=findObject(Emp.class, sql,41);*/

String sql="select name,id from emp  ";
Emp emp=findObject(Emp.class, sql,args);
//getEmp(sql, args);
//Emp emp=get(Emp.class, sql,args);
//System.out.println(emp);

}





}