1.查询数据库
public <T> List<T> Select(String sql, Class<T> mode){
List<T> reList = new ArrayList<T>();
T reT = null;
ResultSet rs = null;
ResultSetMetaData rsd;
try {
rs = this.conn.createStatement().executeQuery(sql);
int columnCount = 0;
while(rs.next()){
Map<String, Object> map = new HashMap<String, Object>();
rsd = rs.getMetaData();
columnCount = rsd.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
map.put(rsd.getColumnName(i), rs.getObject(i));
}
reT = mode.newInstance();
for(Map.Entry<String, Object> ent:map.entrySet()){
ReflectionUtils.setFieldValue(reT, ent.getKey(), ent.getValue());
}
reList.add(reT);
}
} catch (Exception e) {
e.printStackTrace();
} finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
}
}
}
return reList;
}
2.通过反射取值(核心代码)
/**
* 直接设置对象属性值, 忽略 private/protected 修饰符, 也不经过 setter
*
* @param object
* @param fieldName
* @param value
*/
public static void setFieldValue(Object object, String fieldName, Object value) {
Field field = getDeclaredField(object, fieldName);
if (field != null) {
makeAccessible(field);
try {
field.set(object, value);
} catch (Exception e) {
}
}
}
/**
* 使 filed 变为可访问
*
* @param field
*/
public static void makeAccessible(Field field) {
if (!Modifier.isPublic(field.getModifiers())) {
field.setAccessible(true);
}
}
/**
* 循环向上转型, 获取对象的 DeclaredField
*
* @param object
* @param filedName
* @return
*/
public static Field getDeclaredField(Object object, String filedName) {
for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) {
try {
return superClass.getDeclaredField(filedName);
} catch (NoSuchFieldException e) {
// Field 不在当前类定义, 继续向上转型
}
}
return null;
}
3.调用示例
List<Mode> modeList = (List<Mode>) oracleAPI.Select(sql, Mode.class);
4.模型
package Modes;
public class Mode {
private String NAME;
private BigDecimal ID; //数字要用这个 int无法赋值 oracle number字段
public void setNAME(String NAME) {
NAME= NAME;
}
public String getNAME() {
return NAME;
}
public void setID(BigDecimal ID) {
ID= ID;
}
public String getID() {
return ID;
}
}
分享到:
相关推荐
利用JAVA反射读取数据库表名自动生成对应实体类的操作 标题分析: 该标题主要介绍了利用JAVA反射机制,读取数据库表名,并自动生成对应的实体类的操作。这种操作可以自动根据表名生成实体类,具有很好的参考价值和...
这个工程是使用 java 来使用反射的原理读取 *.proproies 资源文件中的一些配置信息。利用此方法可以在没有使用框架的情况下...如:可以将一些数据库配置信息,重要信息写入到资源文件中,在使用反射来读取这些信息。
然后,我们可以通过反射获取这些注解信息,动态地创建SQL语句并执行相应的CRUD(创建、读取、更新、删除)操作。 以下是一个简单的例子: ```java // 自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target...
例如,系统可以通过反射读取数据库连接字符串,并根据这些信息动态建立数据库连接。此外,反射也可以用于动态调用方法,比如根据用户权限动态执行某些操作。 再者,缓存机制是提高程序性能的关键手段。在OA程序中,...
在实体类生成数据库表的过程中,反射被用来读取实体类的元数据,如字段名、类型等,然后根据这些信息构建出创建数据库表的SQL语句。 在实际应用中,我们可能使用Hibernate的`Hibernate Tools`或者MyBatis的`MyBatis...
C#读取SQL数据库,生成SQL语句; 可以是2000、2005的库,为了简单,写在了一个ini文件里,就是数据库的链接字符串,任意修改,点击运行即可; 自己写着用的,纯SQL语句,字段太多了,就写着太费劲了,闲来无事,就写...
总结起来,通过在.NET中结合反射和简单工厂模式,我们可以构建灵活的代码,以适应不同的数据库环境,而无需硬编码特定的数据库访问逻辑。这种做法提高了代码的可扩展性和可维护性,对于多数据库支持的应用来说非常...
在数据库管理方面,ScrewDriver提供了读取数据库表信息的功能。它可以列出数据库中的所有表,包括字段名、数据类型、主键等信息,帮助开发者快速了解数据库结构。此外,它还可能支持创建新的数据库表,或者修改现有...
为了解决这个问题,我们可以考虑实现一个通用转换类,例如使用Java中的反射机制来动态读取Excel文件的元数据,并根据元数据生成对应的SQL语句来将Excel数据导入到数据库中。 Excel读取数据导入DB2数据库需要使用POI...
本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...
标题中的“读取Bean类自动创建数据库”是指在软件开发中,通过编程方式解析Java Bean类的信息,并利用这些信息自动生成对应的数据库结构。这通常涉及到Java的反射机制和数据库操作技术。 首先,Java反射机制是Java...
- Read:读取,对应SELECT语句,用于获取数据库中的数据。 - Update:更新,对应UPDATE语句,用于修改表中的已有数据。 - Delete:删除,对应DELETE语句,用于从表中移除数据。 实现这一功能可能涉及到的技术和概念...
总结来说,"反射技术压缩和修复Access数据库(没有依赖)"是一个利用C++的.NET特性,通过反射动态操作Access数据库,实现无额外库依赖的数据库压缩和修复程序。这种技术的应用展示了.NET Framework的强大功能,同时也...
综上所述,通过Java的反射和注解技术,我们可以实现动态地读取数据库连接信息,并在运行时创建和管理数据库连接。这种方式既保持了代码的灵活性,又简化了配置管理,是Java开发中的一个高级技巧。在实际应用中,可能...
本篇文章主要探讨如何在C#中通过使用`DataSet`对象来读取数据库,并将其转换为泛型集合,如`List<T>`。 首先,我们来看一个基本的示例代码,它演示了如何从数据库获取数据并将其绑定到一个`GridView`控件上。`Page_...
在Java编程中,"基于反射+配置文件动态选择数据库"是一种常见的高级技术,它结合了反射、配置文件读取和数据库连接管理等多个核心概念。这种技术主要用于构建灵活、可扩展的应用程序,允许根据运行时环境或用户需求...
UIImage 转为 NSData 以 bytes 模式 直接插入到 数据库 正在做 可设置模式 数据库保存图片名称 图片放在document 目录下 NSData 目前也是 直接插入到数据库 后面可能会跟图片一样处理 数据库 只保存名称 ...
3. 使用反射加载数据库驱动和创建工厂:通过`Class.forName()`加载JDBC驱动,然后创建相应数据库的工厂实例。 4. 创建数据库连接:调用工厂实例的方法,如`createConnection()`,获取数据库连接。 5. 配置文件:存储...
通过缓存先前查询的结果,我们可以避免重复的数据库交互,尤其是对于那些计算密集型或读取频繁的操作,缓存可以显著提升响应速度。 博客文章可能深入探讨了以下几点: 1. 如何定义抽象工厂接口,以及如何设计数据库...
通过这个项目,开发者可以学习到如何结合数据库和控件来构建动态的用户界面,以及如何利用反射来实现更灵活的代码设计。同时,这也是对事件处理、控件操作和图形绘制等多个VB.NET核心概念的实际应用。