反射机制编写数据库插入操作

来源:互联网 发布:网络女作家收入排行榜 编辑:程序博客网 时间:2024/06/06 20:47

对于不同的表都可根据传参,调用该方法实现数据库的信息插入,极大的减小了冗余度。

public class DB {    private Connection conn = null;    private Statement statement = null;    private static DB instance = null;    private ResultSet rs = null;    private DB() {        try {            String url = "jdbc:mysql://localhost:3306/struts2";            Class.forName("com.mysql.jdbc.Driver");            conn = DriverManager.getConnection(url, "root", "root");        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }    }    public static DB getInstance() {        //保证数据库只创建一次链接        if (instance == null) {            instance = new DB();        }        return instance;    }    public void insert(String tableName,Class<?> clazz,Object obj){        StringBuffer sql = new StringBuffer(256);        StringBuffer name = new StringBuffer(256);        StringBuffer value = new StringBuffer(256);        name.append('(');        value.append(" values(");        Field[] fields = clazz.getDeclaredFields();        int count = fields.length;        Boolean peace = false;        for (Field field : fields) {            field.setAccessible(true);            String n = field.getName();            if(!peace)                peace=true;            else            {                name.append(',');                value.append(',');            }            name.append(n);            value.append('?');        }        name.append(')');        value.append(')');        sql.append("insert into " + tableName).append(name).append(value);        try {            PreparedStatement ps = conn.prepareStatement(sql.toString());            for(int i=1;i<=count;i++)                ps.setObject(i, fields[i-1].get(obj));              ps.executeUpdate();        } catch (SQLException e) {            e.printStackTrace();        } catch (IllegalArgumentException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        }    }}
0 0
原创粉丝点击