数据库对象映射为java对象,不使用框架
Posted Dota_小川
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库对象映射为java对象,不使用框架相关的知识,希望对你有一定的参考价值。
方法:
public static <T> List<T> processResultSetToList(ResultSet rs, Class<T> clazz) throws Exception { List<T> ls = new ArrayList<T>(); Field[] fields = clazz.getDeclaredFields(); while (rs.next()) { T tt = clazz.newInstance(); for (Field field : fields) { try { /** * 如果Oracle数据库中的类型是 number p.getWriteMethod().invoke(tt, new * Object[] { rs.getObject(p.getName()) }) 会报如下错误 * java.lang.IllegalArgumentException: argument type * mismatch --- 另外如果mysql数据库中的bigint 在进行setXxxx(Integer * val)时候也会抛出该异常 也会抛出该异常 */ Object value = null; try { String fieldName = getColumnName(field); switch (TypeUtils.getMappedType(field)) { case Long: value = Long.valueOf(rs.getLong(fieldName)); break; case Integer: value = Integer.valueOf(rs.getInt(fieldName)); break; case Double: value = Double.valueOf(rs.getDouble(fieldName)); break; case Byte: InputStream ins = rs.getBinaryStream(fieldName); if(ins != null){ value = IOUtils.toByteArray(ins); } break; case Date: /** * 15-12-8 * 转为util.Date */ Timestamp t = rs.getTimestamp(fieldName); if(t!=null){ value = new Date(t.getTime()); } break; default: value = rs.getObject(fieldName); break; } } catch (Exception e) {// 如果仅仅查询Class的部分字段 if (e.getMessage().matches("Column\\s+‘.+?‘\\s+not\\s+found.")) { switch (TypeUtils.getMappedType(field)) { case Long: case Integer: value = 0; break; default: value = null; break; } } } field.setAccessible(true); if(value != null){ field.set(tt, value); } } catch (IllegalArgumentException e) { e.printStackTrace(); } } ls.add(tt); } DBUtils.close(rs, null, null); return ls; }
以上是关于数据库对象映射为java对象,不使用框架的主要内容,如果未能解决你的问题,请参考以下文章
Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite