public <E> List<E> selectList(Mapper mapper, Connection conn) { PreparedStatement pstm = null; ResultSet rs = null; try { String queryString = mapper.getQueryString(); String resultType = mapper.getResultType(); Class domainClass = Class.forName(resultType); pstm = conn.prepareStatement(queryString); rs = pstm.executeQuery(); List<E> list = new ArrayList<E>(); while (rs.next()) { E obj = (E) domainClass.newInstance(); ResultSetMetaData rsmd = rs.getMetaData(); int columnCount = rsmd.getColumnCount(); System.out.println(columnCount); for (int i = 0; i <= columnCount; i++) { //獲取每列的名 String columnName = rsmd.getColumnName(i); //獲取每列值 Object columnValue = rs.getObject(columnName); //給obj賦值,使用的是java內省機制(借助PropertyDescriptor實現屬性的封裝) PropertyDescriptor pd = new PropertyDescriptor(columnName, domainClass); Method writeMethod = pd.getWriteMethod(); writeMethod.invoke(obj, columnValue); } list.add(obj); } return list; } catch (Exception e) { throw new RuntimeException(e); } }
這樣會報錯
java.sql.SQLException: Column index out of range.
解決辦法
數組越界了,嘗試更改fori循環