用SQLite4java中的数据填充JTable的最佳方法
我使用的是sqlite4java,我想在表组件中显示查询结果。 我制作了一个数据模型,它通过获取每个调用值来工作,如下面的代码所示,但是当查询结果有10k行或更多行和10列时,它的速度非常慢用SQLite4java中的数据填充JTable的最佳方法,java,swing,sqlite,jtable,datamodel,Java,Swing,Sqlite,Jtable,Datamodel,我使用的是sqlite4java,我想在表组件中显示查询结果。 我制作了一个数据模型,它通过获取每个调用值来工作,如下面的代码所示,但是当查询结果有10k行或更多行和10列时,它的速度非常慢 public Object getValueAt(final int row,final int column) { return queue.execute(new SQLiteJob<Object>() { @Override protected Obj
public Object getValueAt(final int row,final int column) {
return queue.execute(new SQLiteJob<Object>() {
@Override
protected Object job(SQLiteConnection connection) throws SQLiteException {
Object Result = "";
SQLiteStatement st = connection.prepare("SELECT * from test LIMIT ?,1 ;");
st.bind(1, row);
while (st.step()) {
Result = st.columnString(column);
}
st.dispose();
return Result;
}
}).complete();
}
公共对象getValueAt(最终整数行,最终整数列){
return queue.execute(new SQLiteJob()){
@凌驾
受保护对象作业(SQLiteConnection连接)引发SQLiteException{
对象结果=”;
SQLiteStatement st=connection.prepare(“从测试限制中选择*,1;”);
圣比德(1,世界其他地区);
while(st.step()){
结果=st.columnString(列);
}
圣安德鲁斯();
返回结果;
}
}).complete();
}
什么是使其尽可能快地工作的正确方法 我从未接触过SqLite,也许我不同意这可能太懒了
JTable
的数据移动到background Tasks
,方法是使用或Runnable#Thread
(在这种情况下,DefaultTableModel
的输出必须包装到invokeLater
),在这里,您可以通过将一个SQL查询(…LIMIT int,int)
拆分为几个单独的查询并将单独的输出拆分为JTable
AbstractTableModel
的准备好的类(避免重新发明轮子),搜索ResultSetTableModel
,或者最好的方法是通过@camickr我从未接触过SqLite,也许我不同意这可能太懒了
JTable
的数据移动到background Tasks
,方法是使用或Runnable#Thread
(在这种情况下,DefaultTableModel
的输出必须包装到invokeLater
),在这里,您可以通过将一个SQL查询(…LIMIT int,int)
拆分为几个单独的查询并将单独的输出拆分为JTable
AbstractTableModel
的准备好的类(避免重新发明轮子),搜索ResultSetTableModel
,或者最好的方法是通过@camickr当前,每次调用
getValueAt
方法(称为lot)时,您都将执行一个查询。通常,数据库查询的速度不够快,无法在这种方法中使用(使用远程数据库时肯定不行)
更好的方法是查询数据库一次(好的,这取决于从数据库中检索到的数据的大小),将其放入TableModel
中,并使用该TableModel
构建表
所以包含了很多关于这个问题的问题和答案,所以快速搜索会指向很多示例代码。我抄袭了其中一个问题。该页面上代码的所有学分当然归作者所有(作者也在这里,但我忘记了他的用户名)当前,每次调用
getValueAt
方法时,您都会执行一个查询(这被称为lot)。通常,数据库查询的速度不够快,无法在这种方法中使用(使用远程数据库时肯定不行)
更好的方法是查询数据库一次(好的,这取决于从数据库中检索到的数据的大小),将其放入TableModel
中,并使用该TableModel
构建表
所以包含了很多关于这个问题的问题和答案,所以快速搜索会指向很多示例代码。我抄袭了其中一个问题。该页面上代码的所有学分当然归作者所有(作者也在场,但我忘记了他的用户名)我的问题是
SQLite
是否已实现分页
,意思是您的代码(选择…限制?,1)
我不知道分页是什么意思,但选择。。限制x,y可以正常工作。此SQL连接只是单向的???,仅用于将数据从SQL引擎填充到JTable???,或者JTable中的更新可以立即保存到数据库???此时仅选择并显示结果我的问题是SQLite
是否已实现分页
,意思是你的代码(选择….LIMIT?,1)
我不知道你所说的分页是什么意思,但是选择。。限制x,y可以正常工作。此SQL连接只是单向的???,仅用于将数据从SQL引擎填充到JTable???,或者JTable中的更新可以立即保存到数据库???,此时只需选择并显示结果