今天想跟大家聊聊,我最近捣鼓的这个叫 CachedRowSet 的玩意儿。我对这东西是一脸懵逼的,听都没听过。不过最近有个项目,需要搞一个不怎么需要连数据库的功能,我就琢磨着能不能把数据搞到内存里,这样每次操作就不用老是去连数据库。一查,还真有这种好事,就是这个 CachedRowSet。
这个 CachedRowSet ,它就像一个临时的、存在内存里的数据表,只有在需要从数据库里读数据或者往数据库里写数据的时候,才连一下数据库,其他时候就靠自己内存里存的那些数据干活。我一想,这不正是我想要的吗?轻量级,还不用频繁连接数据库,多
我得把驱动加载,然后连上我的数据库。我就得创建一个 ResultSet 对象,正常查数据呗。然后就是关键的一步:创建一个 CachedRowSet 对象,然后把刚才从 ResultSet 里拿到的数据给灌进去。这样,我的 CachedRowSet 里就有数据,而且这些数据都在内存里,随时可以用。
因为项目里需要分页显示数据,我得设置一下每页显示多少条,然后从 CachedRowSet 里拿我需要的那一页数据。这里有个小插曲,我在用一个叫 rowset 的包时,莫名其妙碰到空指针异常,提示我在什么 *:61 那里出问题,当时给我整得是一头雾水,好一通搜索才解决。
我还发现,这个 CachedRowSet 有个全名,叫 *.CachedRowSetImpl。它的老爹是 *.BaseRowSet,还实现好几个接口,像 *、*、* 这些。看起来,来头不小。
不过我在把 CachedRowSet 里的数据倒腾成我需要的对象时,发现没啥特别顺溜的办法,只能一个个去 get 出来,然后 set 到我的对象里。虽然有点笨,但也凑合能用,总比每次都去数据库里捞数据强多。
我之前一直在用 ResultSet 来操作数据库,这玩意儿算是老朋友,但现在看来,CachedRowSet 这种新的方式确实有它的好处。至少在我的这个项目里,用起来感觉是爽多,效率也高不少。我觉得这波操作还是挺值的,也算是又学到一招。
我想说,虽然这个过程里也有一些坑,但我对这个 CachedRowSet 还是挺满意的。以后要是再遇到类似的需求,我肯定还会考虑用它。好,今天的分享就到这里,希望对你们有所帮助!