java:大量的数据(180万)从数据库读取时,要求一个字段最后面是不是‘甲乙丙丁。。。到癸

来源:百度知道 编辑:UC知道 时间:2024/09/20 11:45:07
主要是考虑效率,请问用java怎么写运行的快?
不行啊,库是公安局的,不可能让你随便加的
现在 已经从数据库查出来了,要在java中处理。
我问的 java怎么写 要知道多写一个if语句,就的多运行很长时间的

如果数据库侧不能操作的话,只能用java来操作了,
但是正常的一条数据,如果有30个列左右,java的list大概存2-4万就会出现内存溢出,推荐你先通过 select count(1) from 表 。。。查出有多少条,然后,把list控制在1万左右,我估计公安系统一般都是oracle吧,我之前做的公安也是oracle,那么你通过rownum进行数据分割。(如果是其他数据库也可以,sqlserver用top,mysql用limit,db2用rownumber() )
比如long count=你读出的总数,比如说是1,800,000条。
再来一个倍数,就是
long x=count/10000;
就可以知道循环和分页的数目
List data=null;
for(i=0,i<=x,i++){
...data=find("select .. where rownum>"+i*10000+" and rownum=<"+(i*10000+10000));
execute("update .....").
}
以上思路已经经过测试,并在项目中应用,肯定没问题,只是耗费的时间比较长,建议通过定时任务在后半夜去执行。
如果楼主觉得有用,给我加点分吧,5分有点太那个了。

用存储过程查找。
查找速度取决与数据库,跟程序关系不是很大。

公安局的你都能查到,太牛了,那你就用preparedStatement把,这个算是优化的了

如果单考虑查询效率,使用存储过程当然最快.130万的数据算不上大,如果不满意可以考虑把数据库持久化框架拿掉,使用DBUtil之类的开源工具代替.如ls所说这样的应用主要的效率问题还是存储过程设计的好坏,程序只用来取一个最后的查询结果而已.