Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用SQLite4java中的数据填充JTable的最佳方法_Java_Swing_Sqlite_Jtable_Datamodel - Fatal编程技术网

用SQLite4java中的数据填充JTable的最佳方法

用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

我使用的是sqlite4java,我想在表组件中显示查询结果。 我制作了一个数据模型,它通过获取每个调用值来工作,如下面的代码所示,但是当查询结果有10k行或更多行和10列时,它的速度非常慢

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,也许我不同意这可能太懒了

  • (对于最硬的SQL查询)使用创建,用于填充
    JTable
    的数据移动到
    background Tasks
    ,方法是使用或
    Runnable#Thread
    (在这种情况下,
    DefaultTableModel
    的输出必须包装到
    invokeLater
    ),在这里,您可以通过将一个SQL查询
    (…LIMIT int,int)
    拆分为几个单独的查询并将单独的输出拆分为
    JTable

  • 对于标准查询,您可以使用基于
    AbstractTableModel
    的准备好的类(避免重新发明轮子),搜索
    ResultSetTableModel
    ,或者最好的方法是通过@camickr


  • 我从未接触过SqLite,也许我不同意这可能太懒了

  • (对于最硬的SQL查询)使用创建,用于填充
    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中的更新可以立即保存到数据库???,此时只需选择并显示结果