怎样写一个通用的JDBC查询方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样写一个通用的JDBC查询方法相关的知识,希望对你有一定的参考价值。

只知道要用到ResultSetMetaData这个类,和java的反射机制
要求是通用的。不管查询的是什么实体的内容.谢谢

public static Object get(Class clazz,String sql,Object[] pars)

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
Object obj = null;

//获得数据库连接
conn = getConnection();
try
//给sql的参数赋值并执行查询
ps = conn.prepareStatement(sql);
for (int i = 0; i < pars.length; i++)
ps.setObject(i+1, pars[i]);

rs = ps.executeQuery();

//根据查询结果获得该rs对应的ResultSetMetaData对象
ResultSetMetaData rsmd = rs.getMetaData();
//获得返回的列的数量
int count = rsmd.getColumnCount();
//该数组存放列的名称
String[] columns = new String[count];
//向数组中存放列的名称
for (int i = 0; i < columns.length; i++)
columns[i] = rsmd.getColumnLabel(i+1);


//如果结果中有数据存在
if(rs.next())

//根据pojo的class反射获得其对象
obj = clazz.newInstance();
//获得pojo所有的方法
Method[] methods = obj.getClass().getMethods();

for (int i = 0; i < columns.length; i++)
//根据列名获得set方法<由于没有映射文件,要求pojo中的属性必须和列名相同>
String column = columns[i];
String methodName = "set" + column.substring(0,1).toUpperCase() + column.substring(1);

//根据获得的方法数组去迭代 如果方法名称和上面获得的set方法相同 就执行这个方法
for (int j = 0; j < methods.length; j++)
Method method = methods[j];
if(method.getName().equals(methodName))

method.invoke(obj, rs.getObject(column));





catch (Exception e)
e.printStackTrace();
finally
close(rs,ps,conn);


return obj;



真要做能用的查询,还是使用xml配置文件或者注解好些。比较灵活,性能也要好些。
用元数据都是比较耗费性能的,而且也比较麻烦。
参考技术A Connection conn = getConnection();
List list = new ArrayList();
try
Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(SQL);

ResultSetMetaData md = rs.getMetaData();

int columnCount = md.getColumnCount();

while (rs.next())

Map map = new HashMap();

for (int i = 1; i <= columnCount; i++)

map.put(md.getColumnName(i), rs.getObject(i));



list.add(map);



catch(SQLException e)

e.printStackTrace();


return list;
我自己写的,不管什么SQL,都可以查询获取到一个list,如何取list,我想不是这个主题的内容本回答被提问者采纳

以上是关于怎样写一个通用的JDBC查询方法的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

使用 JDBC 从表中选择前 N 行的通用方法

JDBC-通用查询(笔记)

jdbc 可处理事物的通用增删查改函数