1. 程式人生 > >反射從入門到精通(二)

反射從入門到精通(二)

char tostring import host res substring bject getc i++

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.運行結果如下:

技術分享

反射從入門到精通(二)