`

枚举反射的应用(sql update语句匹配)

 
阅读更多

枚举反射的应用(sql update语句匹配)

 

protected void update(T o, boolean deleteflag) {
		StringBuilder sd = new StringBuilder("update ");
		String className = o.getClass().getSimpleName();
		if(className.contains("VO")) {
			sd.append(className.toLowerCase().substring(0, className.length()-2)).append(" ");
		}else {
			sd.append(className.toLowerCase()).append(" ");
		}
		sd.append("set ");
		StringBuilder id = new StringBuilder("where ");
		if(deleteflag) {
			id.append("deleteflag=0 and ");
		}
		try {
			for(Method m : o.getClass().getDeclaredMethods()) {
				String name = m.getName();
				if (name.startsWith("get")) {
					sd.append(name.substring(3).toLowerCase()).append("=");
					if(m.invoke(o) instanceof String) {
						sd.append("'").append(m.invoke(o)).append("', ");
					}
					else if(m.invoke(o) instanceof Enum) {
						Class enumClass = m.invoke(o).getClass().getFields()[0].getDeclaringClass();
						if(enumClass.isEnum()) {
							for(Object obj : enumClass.getEnumConstants()) {
								if(((Enum)obj).name().equals(m.invoke(o).toString())) {
									for(Method mEnum : enumClass.getDeclaredMethods()) {
										String enumName = mEnum.getName();
										if(enumName.startsWith("get")) {
											sd.append("'").append(mEnum.invoke(m.invoke(o))).append("', ");
										}
									}
								}
							}
						}
					}
					else {
						sd.append(m.invoke(o)).append(", ");
					}
				}
				if(name.startsWith("primaryGet")) {
					id.append(name.substring(10).toLowerCase()).append("=");
					if(m.invoke(o) instanceof String) {
						id.append("'").append(m.invoke(o)).append("';");
					}else {
						id.append(m.invoke(o)).append(";");
					}
				}
			}
			sd.delete(sd.length()-2, sd.length());
			sd.append(" ");
			sd.append(id);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		System.out.println(sd.toString());
//		executeTrans(sd.toString());
	}

 

或者:

Object myEnum=null;

        Class enumClass=(Class)Class.forName("com.reflectenum.MyEnum");//MyEnum包含CAT,DOG,PIG
        if(enumClass.isEnum()){
            for(Object obj:enumClass.getEnumConstants()){
                if(((Enum)obj).name().equals("DOG")){
                    result=obj;
                }
            }
        }
        System.out.println(result);//将打印出DOG

 

 

 

 

分享到:
评论

相关推荐

    在JDK 1.5中实现真正面向对象形式的SQL语句3 (含有源码,代码生成工具)

    在实现面向对象SQL语句时,我们可以创建泛型类来代表不同的SQL操作(如SELECT、INSERT、UPDATE、DELETE),并通过泛型约束确保传入的参数与SQL语句的预期类型一致。 2. **枚举**:在JDK 1.5之前,我们通常使用字符...

    华中科技大学数据库实验:Sql练习部分

    此外,SQL还提供了更新数据的能力,即UPDATE语句。如果我们想更新学生张三的出生日期: ```sql UPDATE student SET birthdate = '2000-01-01' WHERE name = '张三'; ``` 在MySQL这个流行的开源数据库管理系统中,...

    会计科目和会计科目分类的两张mysql表,sql语句文件

    在SQL中,创建表通常使用`CREATE TABLE`语句,其中包括字段名、数据类型、约束条件等。会计科目表可能包含以下字段: 1. `id`:会计科目的唯一标识,通常设置为主键(`PRIMARY KEY`),数据类型可能是整型(`INT`)...

    矿大数据库应用.pptx

    SQL 语句的主要组成部分包括 SELECT 语句、INSERT 语句、DELETE 语句、UPDATE 语句、CREATE 语句、DROP 语句、ALTER 语句等。 SELECT 语句是 SQL Server 中最基本和最重要的语句之一。它用于从数据库中检索数据。 ...

    Java反射泛型,实现数据库的动态增删改查等功能

    Java反射和泛型是两种强大的编程特性,它们在开发中有着广泛的应用,特别是在数据库操作的动态化场景下。本文将详细介绍如何结合这两种技术实现在Java中对MySQL、SQL Server或Oracle数据库进行动态的增删改查操作。 ...

    MySQL控制台各种基础语句总结

    MySQL 是一种关系型数据库管理系统,广泛应用于各种 web 应用程序中。掌握 MySQL 控制台的基础语句是开发人员的必备技能。本文总结了 MySQL 控制台的各种基础语句,从连接、启动、事务、索引等高级操作,旨在帮助...

    sqlhelper类传入数字1234和对象数据控制数据库操作,无需书写sql语句

    在这里,数字1234可能代表一个预定义的SQL操作ID或者枚举值,用来指示要执行的具体数据库操作,例如,1可能代表插入(Insert),2代表更新(Update),3代表删除(Delete),4可能代表查询(Select)。这样的设计...

    SQL语句,创建数据库及表结构,视图及触发器

    ### SQL语句详解:创建数据库、表结构、视图及触发器 在IT行业中,数据库的设计与管理是一项至关重要的技能。SQL(Structured Query Language)作为处理关系型数据库的标准语言,在数据库设计与管理方面发挥着不可...

    SQL自学教程资料汇总

    3. 数据更新(UPDATE语句):用于修改数据库中已存在的记录。 4. 数据删除(DELETE语句):用于从数据库中删除特定的记录。 5. 数据创建(CREATE语句):用于创建数据库、表、视图等数据库对象。 6. 数据修改...

    c#知识点sql 出个人总结 c#知识点sql 出个人总结

    2. 数据库连接:创建并管理数据库连接,执行SQL语句,如SELECT、INSERT、UPDATE、DELETE。 3. 存储过程:在数据库端预编译的SQL代码块,可提高性能和安全性。 4. 参数化查询:防止SQL注入攻击,通过参数化的命令...

    SQL注入工具

    当攻击者在应用程序的输入字段中插入恶意SQL代码时,如果应用程序没有进行适当的输入验证和转义,攻击者就可能控制数据库,获取敏感信息,甚至篡改或删除数据。 标题中的“SQL注入工具”指的是专门用于检测和利用...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    10.3.3 用SELECT和UPDATE语句进行赋值 10.4 合并数据 10.4.1 MERGE语句基础 10.4.2 额外增加一个谓词 10.4.3 多个WHEN子句 10.4.4 WHEN NOT MATCHED BY SOURCE子句 10.4.5 MERGE Values 10.4.6 MERGE与触发器...

    global文件设置sql防注入

    SQL注入是一种常见的网络安全威胁,它允许攻击者通过输入恶意的SQL语句来操纵或获取数据库中的敏感信息。在Web应用程序中,SQL注入通常发生在用户输入的数据未经适当验证或过滤就被直接用于构造数据库查询的情况下。...

    SQLServer2008技术内幕T-SQL查询包含源代码及附录A

    10.3.3 用SELECT和UPDATE语句进行赋值462 10.4 合并数据465 10.4.1 MERGE语句基础467 10.4.2 额外增加一个谓词470 10.4.3 多个WHEN子句471 10.4.4 WHEN NOT MATCHED BY SOURCE子句472 10.4.5 MERGE Values473 10.4.6...

    DBOperate.cs,DBsql.cs

    它可能包含方法如`ExecuteNonQuery()`用于执行不返回结果集的SQL命令(例如INSERT或UPDATE语句),`ExecuteScalar()`用于获取单个值(如SELECT COUNT(*)语句的结果),以及`ExecuteReader()`用于处理返回多行记录的...

    Oracle Server JRE 7 Update 55

    4. **开关匹配**:虽然在Java 7中并未完全实现,但开始引入了开关表达式的基础,为未来的开关语句支持枚举和字符串打下基础。 5. **文件系统API增强**:NIO.2(New I/O 2)提供了更好的文件系统操作,如文件遍历、...

    C#+SQL Server项目开发实践范例.zip

    - SQL语言:掌握SQL查询语句(SELECT)、插入数据(INSERT)、更新数据(UPDATE)、删除数据(DELETE)的基本语法。 - T-SQL扩展:学习存储过程、事务处理、游标、动态SQL等高级特性。 - 安全性与权限管理:理解...

    sqli-labs-master-注入学习靶机

    3. **SQL语法**:理解基本的SQL语句,如SELECT、INSERT、UPDATE和DELETE,以及如何利用它们执行恶意操作。 4. **SQL注入工具**:学习如何使用sqlmap进行自动化扫描、枚举、数据提取和数据库控制。 5. **防御策略**...

Global site tag (gtag.js) - Google Analytics