我查到的ResultSet一个在多于千条记录,如果记录少时,那显示延迟不是很明显,但如果记录集的记录数在多些,那就很显示。如何才能以最快速度显示完所有记录呢?
以下为我的原代码:
CallableStatement proc = null;
ResultSet rs = null;
try {
proc = mf.args.dcc.prepareCall("调用存储过程");
\\设置参数,就不写出来
rs = proc.executeQuery();
String[] st = new String[] {"",""};\\标题数组
String str = "";
while(rs.next()) {
for(int t=0;t<st.length;t++) {
str = str + rs.getString(t+1).trim() + "\r";
}
str = str + "\n";
}
String[] arr = str.split("\n");
String[][] data = new String[arr.length][st.length];
for(int t=0;t<data.length;t++) {
data[t] = arr[t].split("\r");
}
strOutArry = data;
DefaultTableModel dtm = new DefaultTableModel(data,st) {
public boolean isCellEditable(int row, int column) {
return false;
}
};
jtbResult = new JTable(dtm);
jsp.getViewport().add(jtbResult);
以下为我的原代码:
CallableStatement proc = null;
ResultSet rs = null;
try {
proc = mf.args.dcc.prepareCall("调用存储过程");
\\设置参数,就不写出来
rs = proc.executeQuery();
String[] st = new String[] {"",""};\\标题数组
String str = "";
while(rs.next()) {
for(int t=0;t<st.length;t++) {
str = str + rs.getString(t+1).trim() + "\r";
}
str = str + "\n";
}
String[] arr = str.split("\n");
String[][] data = new String[arr.length][st.length];
for(int t=0;t<data.length;t++) {
data[t] = arr[t].split("\r");
}
strOutArry = data;
DefaultTableModel dtm = new DefaultTableModel(data,st) {
public boolean isCellEditable(int row, int column) {
return false;
}
};
jtbResult = new JTable(dtm);
jsp.getViewport().add(jtbResult);
http://blog.csdn.net/feiyang21687/archive/2007/09/05/1773068.aspx
http://blog.csdn.net/featheast/archive/2008/11/05/3229141.aspx
内容基本上是一样的。
但问题在于,这个分页显示是使用SQL语句执行,但我使用的是存储过程。谢谢2楼!
我看楼主貌似使用DefaultTableModel对象,只为了显示查询的内容,而没有更改删除之类的功能。
这样的话,可以自己实现那个AbstractTalbeModel,当数据库支持ResultSet滑动读取数据时,这个Model对象,会提供更好的性能与用户体验。
同时,如果数据库不支持ResultSet的滑动读取,可以通过缓存行集的形式,达到上述的效果。
楼主不妨试一下。
如果不会,核心Java第二卷,应该有相关的思路和代码。
分页是必须的,否则你的程序查询的时候很慢。
SwingWorker也是必须的,否则你的程序在大量数据查询的时候会很卡。SwingWorker可以在你查询的过程中将结果直接一条一条动态地在Jtable中显示出来。
4楼所讲的,在JDK的附带的实例中的那个SwingSet2是类似SwingWorker吧?
在网上搜索了一下,这个SwingWorker是JDK1.6新功能。有没有详细一点的资料可提供呢!我现在显示时间缩短了,同时也使用了分页。不过不同的事,我的使用存储过程,不能每显示一页就重新执行一次,因此只能先把执行后的ResultSet记录集全部保存到Vector中,再进行分页。
由于数据量太多,涉及到的表也不是一个,所以执行存储过程需要2分钟左右时间(在查询分析器里执行存储过程完成后所得),在加上把记录集赋给Vector,在给JTable,这样时间也是挺长的。如果系统资源不太好,那执行的速度就更加慢了。唉!对于在大数据量里搜索得到想要的报表,那真是一件好麻烦的事情啊~~~头痛啊!继续努力学习~~~~
思路上我是清析的,稍晚把程序做完了,再去重新检测存储过程。再次谢谢diggywang。
应该能够达要求。
文章在http://blog.csdn.net/preferme/archive/2009/07/26/4381632.aspx