ze() - 1) + ") "); sqlValues.append(" )"); sql.append(sqlValues); Connection conn = null; PreparedStatement pstat = null; try { conn = DBUtil.getConnection(); pstat = conn.prepareStatement(sql.toString()); for (int i = 0; i < values.size(); i++) { pstat.setObject(i + 1, values.get(i)); } pstat.execute(); } catch (SQLException e) { e.printStackTrace(); } DBUtil.close(null, pstat, conn); } /** * 根据给定的Class对象和id查询相应的结果 * * @param cla 给定的Class对象 * @param id 给定的id * @return 返回查询到的相应的类的对象 */ public static T select(Class cla, int id) { // 设置SQL语句 String sql = "select * from " + cla.getName().substring(cla.getName().lastIndexOf(".") + 1) + " where id = "; // 获取当前对象所属类中的方法 Method[] methods = cla.getDeclaredMethods(); Connection conn = null; PreparedStatement pstat = null; ResultSet rs = null; T t = null; try { conn = DBUtil.getConnection(); pstat = conn.prepareStatement(sql); pstat.setInt(1, id); // 获取查询结果 rs = pstat.executeQuery(); // 获取查询结果集中的各个列的属性 ResultSetMetaData rsmd = pstat.getMetaData(); // 获取查询结果集中列的个数 int columnNum = rsmd.getColumnCount(); // 定义字符串数组存放结果集中的列名 String[] columnNames = new String[columnNum]; // 获取结果集中各列的列名并存放到数组中 for (int i = 0; i < columnNum; i++) { columnNames[i] = rsmd.getColumnName(i + 1); } if (rs.next()) { t = cla.newInstance(); for (String columnName : columnNames) { // 获取结果集中各列对应的set方法名 String cName = setMethodName(columnName); // 根据方法名获取方法 for (int i = 0; i < methods.length; i++) { if (cName.equals(methods[i].getName())) { methods[i].invoke(t, rs.getObject(columnName)); break; } } } } } catch (Exception e) { e.printStackTrace(); } finally { DBUtil.close(rs, pstat, conn); } return t; } /** * 根据给定的对象和id更新数据 * * @param t 给定的对象 * @param id 给定的id */ public static void update(T t, int id) { // 获取对象t的class对象 @SuppressWarnings("unchecked") Class cla = (Class) t.getClass(); // 获取t对象中的所有字段 Field[] fields = cla.getDeclaredFields(); // 声明列表用于存放t对象中的字段名(ID除外) List keys = new ArrayList(); // 声明列表用于存放t对象中的字段值(ID除外) List |