反射实现增删改查(DAO层)——修改数据

先贴出代码,后续补充自己的思路、配置文件、使用方式:
/**
     *
     * 修改数据
     *
     */
    @Override
    public void updateObject(Object object, String tableName) {
        StringBuilder sql = new StringBuilder("UPDATE " + tableName + " SET ");
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        // 用于存放传入的对象的参数,默认将id值(主键)的key设为0,方便条件设置
        Map<Integer, Object> fieldsValues = new HashMap<Integer, Object>();
        try {
            for (int i = 0; i < fields.length; i++) {
                fields[i].setAccessible(true);

                if (i == 0) {
                    fieldsValues.put(fields.length - 1, fields[i].get(object));
                    continue;
                }
                sql.append(fields[i].getName());
                sql.append("=?");
                fieldsValues.put(i - 1, fields[i].get(object));
                if (i < (fields.length - 1))
                    sql.append(", ");
                if (i == (fields.length - 1)) {
                    sql.append(" WHERE ");
                    sql.append(fields[0].getName());
                    sql.append("=?");
                }

            }
            connection = DBConnection.getConnection();

            preparedStatement = connection.prepareStatement(sql.toString());
            Class<?> fieldClass = null;
            for (int i = 1; i <= fieldsValues.size(); i++) {
                /**
                 * 获取存入map中对象的参数的类类型,根据类类型选择preparedStatement的set方法
                 */
                fieldClass = fieldsValues.get(i - 1).getClass();
                // 如果类类型为String.class,则执行setString
                if (fieldClass.equals(String.class)) {
                    preparedStatement.setString(i,
                            (String) fieldsValues.get(i - 1));
                }
                // 如果类类型为Float.class,则执行setString
                if (fieldClass.equals(Float.class)) {
                    preparedStatement.setFloat(i,
                            (Float) fieldsValues.get(i - 1));
                }
                // 如果类类型为Integer.class,则执行setString
                if (fieldClass.equals(Integer.class)) {
                    preparedStatement.setInt(i,
                            (Integer) fieldsValues.get(i - 1));
                }
                // 如果类类型为Timestamp.class,则执行setString
                if (fieldClass.equals(Timestamp.class)) {
                    preparedStatement.setTimestamp(i, new Timestamp(
                            ((Date) fieldsValues.get(i - 1)).getTime()));
                }

            }
            // 执行sql语句,返回更新参数
            int columnsCount = preparedStatement.executeUpdate();
            System.out.println("有" + columnsCount + "条数据被更新!");

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } finally {
            DBConnection.close(connection, preparedStatement, null);
        }

    }

原文地址:https://www.cnblogs.com/caoleiCoding/p/9061933.html

时间: 2024-10-12 03:54:05

反射实现增删改查(DAO层)——修改数据的相关文章

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =

反射实现增删改查(DAO层)——删除数据

先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 删除数据 */ @Override public void deleteObject(List<Map<String, Object>> params, String tableName) { StringBuilder sql = new StringBuilder( "DELETE FROM order_info WHERE 1=1 "); Connection connection =

反射实现增删改查(DAO层)——查询数据

先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 数据查询 * */ @Override public List<?> queryObject(List<Map<String, Object>> params, String tableName) { List<Object> objectList = new ArrayList<Object>(); StringBuilder sql = new StringBuilder(

反射实现增删改查(DAO层)——插入数据

先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * 插入数据 */ @Override public void addObject(Object object, String tableName) { StringBuilder sql = new StringBuilder("INSERT " + tableName + " VALUES("); Connection connection = null; PreparedStatement prep

反射实现数据库增删改查DAO及DAOImpl源代码(二)

配置文件源码 配置文件主要用于配置数据库对象(javaBean),配置表名,配置查询条件,配置删除条件 文件名称:objectConfigPath.properties 这个配置文件里面配置的是另外一个配置文件的文件路径 objectConfigPath=com/javasm/supermarket/dao/config/order/objectConfig.properties 文件名称:objectConfig.properties 这个配置文件是本项目很多实现的关键,配置文件中有备注,说的

泛型反射常见应用,通过类型创建实例,通过反射实现增删改查

public class Test { public void MyObj<T>() where T : class { //T t = new T(); T t =System.Activator.CreateInstance<T>(); //获取类型跟字段然后拿到对应名字方法跟字段就可以了 } } 微信官方创建实体的方法,通过泛型类型创建实例System.Activator.CreateInstance<T>(); 新增: public static void Ad

20150113--PDO增删改查+封装PDO类

回顾 方法重写:是因为对象的访问会先去子类的类空间找,从而形成了对父类的覆盖. 继承链:类只能单继承,但是可以通过继承链来实现多继承 特殊类:final类和抽象类 接口:interface PHP重载:当访问一个权限不够或者不存在的属性或者方法的时候,会自动触发的魔术方法. 属性重载和方法重载 对象的保存和还原:serialize和unserialize(对应的类已经在内存:如果有资源属性必须进行重新加载资源),魔术方法(__sleep和__wakeup) 对象遍历:默认只能遍历public属性

OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当然,可以用代码生成器,不过配套的代码生成器暂时没有):又从网上找了一个封装了泛型方法的OracleHelper类,整合到一起,但貌似数据增删改查依然不方便:于是花了两天时间,在原有基础上对增删改查分页查询操作进行了面向对象的封装,并且对批量增删改操作进行事务封装,写事务代码更方便. 原理: 1.利用

关于MVC工厂模式的增删改查sql存储过程

这里MVC中用到了反射,工厂,泛型,接口 在搭建框架的时候,除了MVC的三层以外,还有泛型的接口层和工厂层 下面是dal层调用sql存储过程,增删改查,dal层继承了接口层,实现了接口层里面的方法 1 namespace DAL 2 { 3 public class DalHouse : IHouse 4 { 5 public int Add(HouseInfo m) 6 { 7 string sql = "pro_add"; 8 SqlParameter eid = new SqlP