反射从入门到精通(二)

1. 通过反射动态生成SQL语句

Customer.java

package com.xuzhiwen.reflect;

public class Customer {
    private String name;
    private String password;
    private String address;
    private String phone;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", address='" + address + '\'' +
                ", phone='" + phone + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

2.数据库结构如下:

3.主要代码如下:

package com.xuzhiwen.reflect;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;

public class Test2 {
    public static void main(String[] args) throws Exception {
        Customer customer = new Customer();
        customer.setName("xuzhiwen");
        customer.setPassword("123456");
        customer.setPhone("123456789");

        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test",
                "root",
                "123456");

        StringBuffer sql = new StringBuffer();
        sql.append("insert into customer(");
        Class<?> clazz = customer.getClass();
        Method method[] = clazz.getDeclaredMethods();
        List<Object> list = new ArrayList<Object>();

        for (Method me : method) {
            String methodName = me.getName();

                if (methodName.startsWith("get")){
                    Object value = me.invoke(customer);
                    if (value != null){
                        list.add(value);
                        methodName = methodName.substring(3).toUpperCase();
                        sql.append(methodName+",");
                    }
                }
        }
        sql.deleteCharAt(sql.length() -1);
        sql.append(")");
        sql.append(" value(");

        for (int i = 0; i < list.size(); i++) {
            sql.append("?,");
        }

        sql.deleteCharAt(sql.length() -1);
        sql.append(")");

        PreparedStatement ps = conn.prepareCall(sql.toString());
        for (int i = 0; i < list.size(); i++) {
            ps.setObject(i+1,list.get(i));
        }

        ps.executeUpdate();

        if(ps != null){
            ps.close();
        }
        if (conn != null){
            conn.close();
        }

    }
}

4.运行结果如下:

 

posted @ 2017-10-04 23:35  beibidewomen  阅读(103)  评论(0编辑  收藏  举报