Java 封装update,Class使用

第一个元素为主键,为修改索引
将修改后的对象传入

------------test----------------
package fozzz;

public class myTest {

    public static void main(String[] args) {

        // User user = new User();
        //
        // user.setId(1);
        //
        // user.setName("name");
        //
        // user.setPassword("pwd");
        //
        // Update update=new Update(user);

        Student student = new Student(1, "王宝强", "马蓉", "经纪人", "爱绿");

        Update update = new Update(student);

        boolean ok = update.isOk();

        System.out.println(ok);

    }

}
----------------连接工厂类---------------------
package fozzz;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MyConnection {

    public Connection getConnection() {
        Connection connection = null;
        try {
            connection = DriverManager.getConnection("jdbc:mysql://192.168.1.101/fozzz", "root", "root");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return connection;

    }

}
-----------------连接数据库---------------------
package fozzz;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Update {
    private boolean ok = false;

    public Update(Object object) {

        myUpdate myUpdate = new myUpdate(object);

        Connection connection = new MyConnection().getConnection();

        String sql = myUpdate.getSql();

        int length = myUpdate.getLength();

        Object[] resultArray = myUpdate.getResultArray();

        try {

            PreparedStatement prepareStatement = connection.prepareStatement(sql);

            prepareStatement.setObject(length, resultArray[0]);

            for(int i=1;i<length;i++){
                prepareStatement.setObject(i, resultArray[i]);
            }

            int executeUpdate = prepareStatement.executeUpdate();

            if (executeUpdate > 0) {
                ok = true;
            }

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

    public boolean isOk() {
        return ok;
    }

}

-------------反射,得到sql语句,get方法结果------------------------
package fozzz;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class myUpdate {
    private Class<? extends Object> myClass;
    private Object object;
    private String[] memberArray;// 类变量
    private Object[] resultArray;// get结果
    private int length;// 变量个数
    private String className;

    public myUpdate(Object object) {
        this.myClass = object.getClass();
        this.object = object;

        try {
            myInit();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private void myInit() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException,
            NoSuchMethodException, SecurityException {
        // 成员变量
        Field[] declaredFields = myClass.getDeclaredFields();

        length = declaredFields.length;

        memberArray = new String[length];

        resultArray = new Object[length];

        for (int i = 0; i < length; i++) {
            String name = declaredFields[i].getName();

            memberArray[i] = name;

            // 得到get方法的结果
            resultArray[i] = myClass.getMethod("get" + (char) (name.charAt(0) - 32) + name.substring(1)).invoke(object);
        }

        String[] split = myClass.getName().split("\\.");

        className = split[split.length - 1];
    }

    // 拼接sql语句
    public String getSql() {

        String sql = "update " + className + " set " + memberArray[1];

        for (int i = 2; i < length; i++) {
            sql += "=? ," + memberArray[i];
        }

        sql += "=? where " + memberArray[0] + "=?";

        return sql;
    }

    public Object[] getResultArray() {
        return resultArray;
    }

    public int getLength() {
        return length;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值