- java数组入门教程
- java数组的遍历
- 基于debian(ubuntu)的JDK安装与卸载-vps环境搭建实录(一)
- java环境变量配置(windows7系统)
- java开发环境配置
- 第一个java程序 helloword
- 使用eclipse快速开发java程序
- Java基础语法
- Java对象和类
- Java基本数据类型
- Java变量类型
- Java修饰符
- Java运算符
- Java循环结构 – for, while 及 do…while
- Java分支结构 – if…else/switch
- Java Number类
- Java Character类
- Java String类
- Java日期时间
- java异常处理分类
- java Exception异常处理实例
- java.util.UUID 工具类详解
- java数字格式化类DecimalFormat详解
- JDBC系列教程之一:jdbc简单介绍
- JDBC系列教程之二:jdbc连接数据的步骤
- JDBC系列教程之三:JDBC基本的CRUD(创建、读取、更新、删除)
- JDBC系列教程之四:SQL注入PreparedStatement和Statement
- JDBC系列教程之五:数据类型
- JDBC系列教程之六:一个简单用户相关的数据访问层
- JDBC系列教程之七:用配置文件(properties)和反射实现与具体类的耦合
- JDBC系列教程之八:事务-ACID
- JDBC系列教程之九:事务-SavePoint与JTA
- JDBC系列教程之十:隔离级别
- JDBC系列教程之十一:其他的几个API
- JDBC系列教程之十二:DatabaseMetaData(数据库的元数据信息)和ParameterMetaData(参数的元数据信息)
- JDBC系列教程之十三:ResultSetMetaData
- JDBC系列教程之十四:用反射ResultSetMetaData将查询结果读入对象中
- JDBC系列教程之十五:数据源和连接池
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
知识点
相关文章
更多最近更新
更多JDBC系列教程之十四:用反射ResultSetMetaData将查询结果读入对象中
2019-03-28 00:31|来源: 领悟书生
反射入门参考源代码(ReflectTest.java) |
l 用反射ResultSetMetaData将查询结果读入对象中(简单的O/RMapping)
1)让SQL语句中列别名和要读入的对象属性名一样;
2)通过ResultSetMetaData获得结果列数和列别名;
3)通过反射将对象的所有setXxx方法找到;
4)将3)找到的方法setXxx和2)找到的列别名进行匹配(即方法中的xxx于列别名相等);
5)由上一步找到的方法和列别名对应关系进行赋值
Method.invoke(obj,rs.getObject(columnAliasName));
ORMTest.java |
package com.hyneng.jdbc;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;
import com.hyneng.jdbc.domain.User;
/** * * 201-10-11 * @author HuangYineng * */ public class ORMTest {
/** * @param args * @throws Exception * @throws InvocationTargetException * @throws IllegalAccessException * @throws SQLException */ public static void main(String[] args) throws SQLException, IllegalAccessException, InvocationTargetException, Exception { User user = (User) getObject( "select id as Id, name as Name, birthday as Birthday, money as Money from user where id=1", User.class); System.out.println(user);
Bean b = (Bean) getObject( "select id as Id, name as Name, birthday as Birthday, money as Money from user where id=1", Bean.class); System.out.println(b); } static Object getObject(String sql, Class clazz) throws SQLException, Exception, IllegalAccessException, InvocationTargetException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); String[] colNames = getColNames(rs); Object object = null; Method[] ms = clazz.getMethods(); if (rs.next()) { object = clazz.newInstance(); for (int i = 0; i < colNames.length; i++) { String colName = colNames[i]; String methodName = "set" + colName; // Object value = rs.getObject(colName); // try { // Method m = clazz // .getMethod(methodName, value.getClass()); // if (m != null) // m.invoke(object, value); // } catch (NoSuchMethodException e) { // e.printStackTrace(); // // // } for (Method m : ms) { if (methodName.equals(m.getName())) { m.invoke(object, rs.getObject(colName)); break; } } } } return object; } finally { JdbcUtils.free(rs, ps, conn); } } } |
本文链接:JDBC系列教程之十四:用反射ResultSetMetaData将查询结果读入对象中,转自请注明:http://www.656463.com/article/818
相关问答
更多-
java中的反射和对象的克隆常用不?[2022-03-03]
反射很常用,所有framework都会用到反射;克隆很少用 -
全新版大学英语综合教程第一册第九页到十四页答案[2022-05-16]
对不起答案我没有,我想作业上的题对你来说是很简单的,你只是不想做而已,自己要多总结多思考,这样作业对你才能起到提高的作用,作业是对你学过的知识的巩固和加深了解,请你千万不要把它当成负担。 -
谁有关于Drwamweaver的系列教程么?[2022-06-17]
www.78soft.com -
wdcp系列教程之隐藏Nginx版本号[2022-04-26]
WDCP 隐藏Nginx版本号教程各大门户都隐藏nginx的版本号 他们如此做必有道理所以我们也学习吧总共两步!第一步:先到 /www/wdlinux/nginx-1.4.1(我升级了版本)/conf 下 找到 nginx.conf 文件然后打开找到 tcp_nodelay on;在下面那一行添加 server_tokens off; 即可如:keepalive_timeout60; tcp_nodelay on;server_tokens off;这样就行了 (高手别笑,教程本来就是要方便简便)第二步:如 ... -
您链接的文档适用于非常老的驱动程序。 最近版本的Oracle JDBC驱动程序文档在使用结果集元数据扩展中明确指出: oracle.jdbc.OracleResultSetMetaData接口符合JDBC 2.0标准,但不实现getSchemaName和getTableName方法,因为Oracle数据库不能实现这一点。 换句话说,你不能为Oracle获取这些数据。 The documentation you link is for a very old driver. A recent version o ...
-
尝试使用资源JDBC查询(Try with resources JDBC queries)[2022-11-09]
如果有多个用户(线程)竞争资源,则需要尝试使用资源,例如在多用户Web应用程序中。 在这些情况下, close()实际上不会关闭连接,它只会将其返回到池中,因此可供其他线程检出。 如果您正在创建单个用户Swing应用程序,那么将Connection保持打开状态并不会有害,因为您是唯一使用它的人。 A try-with-resources is necessary if there are multiple users (threads) competing for the resource, such as ... -
您正在查看这些结果,因为它是UNION查询。 这样的查询完全有可能做类似的事情 SELECT Col1 AS Field1 FROM Table1 UNION SELECT Col2 AS Field1 FROM Table2 在这种情况下,如果getColumnName尝试返回结果中基础列的名称,则没有单一的“正确”答案:它应该返回“Col1”还是“Col2”? 由于UNION查询的结果集中的任何列都可以从多个基础列派生,因此getColumnName只能返回该列的有效名称,即上例中的Field1 。 ...
-
如何有效地获得像ResultSetMetaData这样的“AS”列名?(How to effectively get “AS” column name like ResultSetMetaData?)[2022-12-24]
得到它了。 答案是搜索“获取列别名”: http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSetMetaData.html 变成: ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); ArrayList list = new ArrayList(50); while (rs.next()){ ... -
Oracle ResultSetMetaData getPrecision / getScale(Oracle ResultSetMetaData getPrecision/getScale)[2023-04-26]
Oracle无法基于视图或count(*)返回类型,因为它未显式声明。 您的视图可以返回任何精度或比例,具体取决于视图的底层表。 要解决此问题,您需要在查询或视图中强制转换类型,如下所示: select CAST (count(*) AS NUMBER(30)) Oracle can not return a type based on a view or the count(*) as it was not explicitly declared. Your view could return any ...