如何在java中进行数据集定位和过滤?

05-10-11 萧风
似乎ResultSet等都不支持这些在delphi中轻松做的事情

如DataSet.locate()

DataSet.Filter = ...;

DataSet.Filtered = true;

是否有变通的方法??

3
banq
2005-10-11 17:02
Java不象Delphi是一个以数据库为主角的系统,Java系统是一个以中间件对象构件为主角的系统,数据库是配角。

根据上述定位,数据定位和过滤应该在中间层业务层实现,使用Collection方便完成,而不是依赖数据库在数据库端加工!

萧风
2005-10-12 10:19
对于具体如何使用Collection我还有一些问题

1,我建立了一个Item,这个Item类同的ROW,将之一行一行插入到Collection(我使用的是ArrayList,当然用Vector应该也差不多)中,

但如果进行locate定位的话,那就得一个Collection里进行循环,这样的效率恐怕要比那个数据集的locate差的多

2,delphi对于数据库开发确实是很简便,但对于建立中间层来说,也是一个不旬的选择,并不只是用于c/s开发

banq
2005-10-12 11:22
那就使用HashMap,可根据主键快速定位locate那个数据,HashMap和List也可以结合考虑,当然排序就要用到sortedMap了。

Collection操作对象都是基于内存的,而且离前台最近,中间不会隔一个数据库连接。

而使用数据库来实现,则两台机器之间数据库连接或连接池都是性能开销,数据库的大数据磁盘检索哪有Collection的内存检索快,无论你使用什么检索。

所以业务计算依赖数据库计算是没有可伸缩性扩展性的,死路一条。

萧风
2005-10-12 12:23
同意版主的意见,但有时并不是根据一个键值来定位一条数据,而是根据多个键值来定位,这样是不是HashMap或List就无能为力了?

我所说的意思也不是通过与数据库的直连来进行数据的筛选,也是通过内在表的方式来筛选.

banq
2005-10-13 10:50
一个数据是一个对象,每个对象都有唯一的主键ID,杜绝多键,这个唯一主键是系统内部的,可不暴露给用户,这样就发挥HashMap能力了。

HashMap其实是一个内存表,说大了,就是对象缓存的基本机制。

猜你喜欢