对于不同的表都可根据传参,调用该方法实现数据库的信息插入,极大的减小了冗余度。
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();
}
}
}