博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC返回ResultSet结果通过java反射得到java对象
阅读量:5892 次
发布时间:2019-06-19

本文共 899 字,大约阅读时间需要 2 分钟。

hot3.png

我们先来写一个不用框架,用JDBC来操作呢数据库,下面写一个简单的例子:

5b0551db4c8307a77eacde35fce8f03e9ba.jpg

就是这么简单的一段代码,然后就是想从数据库中获取相应的字段,就用get和set方法来处理,返回一个对象,写起来就是麻烦,不通用。

因为java有反射的功能,所以可以抽取出来,写个通用的方法,当然这里参考了其他大神的写法,看了一些博客。

c0870c48ef752240acd1ef1aaf3dd3a3435.jpg

这里先简单处理这几种常用类型,其他的其实可以后续再加上。这里主要依赖反射obj.getDeclaredField(name).getType()获取字段类型,然后通过obj.getMethod("set" + replace, type)来找到数据库java对象的这个set方法,最终method.invoke(newInstance, rs.getString(i))来附值,这么一想,如果查出来是一个很大的list的,那么该怎么优化呢?

先来使用一下,这个写的小工具,就可以不用繁琐的get和set方法:

4ecbe3db2d976e55cd8e1a10cb2eac1ce34.jpg

输出:

133b9214b93b0fa70165a10436ed20dd3f5.jpg

上面是通过对象里面的set和get方法来设置变量的值,这样写起来感觉比较麻烦,直接用Field的set方法是不是更加简单一点,但是这样写,访问的是public对象,所以。。

0fb765be019f4115d4721f47d956b16b9ce.jpg

这里补充一下ResultSetMetaData接口都有哪些信息

可以使用此对象获得列的数目和类型以及每一列的名称:

  • getColumnCount(); 返回 ResultSet 中的列数。 
  • getColumnName(int); 返回列序号为 int 的列名。 
  • getColumnLabel(int); 返回此列暗含的标签。 
  • isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。 
  • isReadOnly(int); 如果此列为只读,则返回 true。 
  • isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。 
  • getColumnType(int); 返回此列的 SQL 数据类型。这些数据类型包括 

参考;

转载于:https://my.oschina.net/u/2277632/blog/3040455

你可能感兴趣的文章
<ctype.h> C语言标准库
查看>>
关于数据结构(一)
查看>>
异常处理汇总-开发工具
查看>>
[LeetCode] Excel Sheet Column Number 求Excel表列序号
查看>>
基于VLC的播放器开发
查看>>
Swift3.0:照片选择
查看>>
Threejs 它可以在建立其内部房间效果可见
查看>>
《数据库技术基础与应用(第2版)》学习笔记——第3章
查看>>
[设计模式]静态代理实现
查看>>
Elasticsearch之源码编译
查看>>
Spring 极速集成注解 redis 实践
查看>>
10个非常有用的CSS技巧
查看>>
linux 安装Nginx-0.8.54
查看>>
Mybatis关联查询(嵌套查询)
查看>>
重装安装包和它的陷阱
查看>>
flex程序设计--事件和事件处理机制--时间事件
查看>>
通过浏览器直接打开Android应用程序
查看>>
MVC调用SVC无法找到资源解决问题
查看>>
PHP版本繁简体,UTF-8和Unicode互转的函数:GB2312Big5,GB2312UTF-8,Big5UTF-8等
查看>>
Google SEO信息年终总结
查看>>