This is a solved problem. Mostly. Lucky You! about 10 years ago I found the JTableResultSet code, have tweaked it into a fancier thing, written two tools using it, both are in this dropbox link.
Look at the .bat files to see where to start, I've used it to interface to multiple DBs over the years, it's gotten fancier, and still has flaws. Ofttimes I go straight to the code to run it, I really need to finish it for a release of sorts :) https://www.dropbox.com/s/e2fu45c7boc2xzj/DBGUITool.zip?dl=0 what it does NOT do is the dynamic load as you scroll down that you described. Not something I wanted, because I generally want to do column-based sorting more than anything else. -- clint the "code license" for everyone: you are free to use all the code *I* wrote for whatever you want, you just aren't free to claim to be the original creator. On Friday, July 7, 2017 at 9:47:54 AM UTC-4, Bilal Zafar wrote: > > Hello all, > I am very new to java, so please ignore if you think this question is > stupid. A task has been assigned to me in which I have to extract data from > h2 database table with **more than 1 crore rows (SAD) from one table.** And > finally show that data into a j table with pagination. > What i exactly want is that when the program starts, it extract lets say 1 > lac record from database and when user scroll down to the end of first lac > records and again extract another lac data from database and so on … > It will be best if he goes scroll up, the program doesn’t extract rows > which are already extracted. I Hope I explained my problem here very well. > Now, After a lot of googling, I found this ( > https://coderanch.com/t/345383/java/JTable-Paging)very good article which > does 90% of what I want, but not with database connection. Can any one tell > how to do this ? > Here is the sample code : > public class PagingTableModel extends AbstractTableModel { > private static final int MAX_PAGE_SIZE = 1000000; > private static final int LATENCY_MILLIS = 1500; > private int dataOffset = 0; > private ArrayList<Integer> data = new ArrayList<Integer>(); > private SortedSet<Segment> pending = new TreeSet<Segment>(); > public int getColumnCount() { > return 2; > } > public String getColumnName(int col) { > if (col == 0) > return "ANUMBER"; > if (col == 1) > return "BNUMBER"; > return "DATETIME"; > } > public int getRowCount() { > return 10000000; // one million > } > public Object getValueAt(int row, int col) { > ArrayList<Integer> page = data; > int pageIndex = row - dataOffset; > //JOptionPane.showMessageDialog(null, dataOffset); > if (pageIndex < 0 || pageIndex >= page.size()) { > System.out.println("object at " + row + " isn't loaded yet"); > schedule(row); > return ".."; > } > Object rowObject = page.get(pageIndex); > return rowObject; > } > private void schedule(int offset) { > if (isPending(offset)) { > return; > } > int startOffset = Math.max(0, offset - MAX_PAGE_SIZE / 2); > int length = offset + MAX_PAGE_SIZE / 2 - startOffset; > load(startOffset, length); > } > private boolean isPending(int offset) { > int sz = pending.size(); > if (sz == 0) > return false; > if (sz == 1) { > Segment seg = pending.first(); > return seg.contains(offset); > } > Segment lo = new Segment(offset - MAX_PAGE_SIZE, 0); > Segment hi = new Segment(offset + 1, 0); > for (Segment seg : pending.subSet(lo, hi)) { > if (seg.contains(offset)) > return true; > } > return false; > } > private void load(final int startOffset, final int length) { > final Segment seg = new Segment(startOffset, length); > pending.add(seg); > Runnable fetch = new Runnable() { > public void run() { > try { > Thread.sleep(LATENCY_MILLIS); > } catch (InterruptedException ex) { > System.out.println("error retrieving page at " + startOffset + ": > aborting"); > pending.remove(seg); > return; > } > final ArrayList<Integer> page = new ArrayList<Integer>(); > for (int j = 0; j < length; j += 1) { > page.add(new Integer(j + startOffset)); > } > SwingUtilities.invokeLater(new Runnable() { > public void run() { > System.out.println("** loaded " + startOffset + " through " + (startOffset > + length - 1)); > setData(startOffset, page); > pending.remove(seg); > } > }); > } > }; > new Thread(fetch).start(); > } > private void setData(int offset, ArrayList<Integer> newData) { > // This method must be called from the event dispatch thread. > int lastRow = offset + newData.size() - 1; > dataOffset = offset; > data = newData; > fireTableRowsUpdated(offset, lastRow); > } > public static void main(String[] argv) { > JTable tab = new JTable(new PagingTableModel()); > JScrollPane sp = new JScrollPane(tab); > JFrame f = new JFrame("PagingTableModel"); > f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); > f.setContentPane(sp); > f.setBounds(30, 50, 1300, 600); > f.setVisible(true); > } > static final class Segment implements Comparable<Segment> { > private int base = 0, length = 1; > public Segment(int base, int length) { > this.base = base; > this.length = length; > } > public boolean contains(int pos) { > return (base <= pos && pos < base + length); > } > public boolean equals(Object o) { > return o instanceof Segment && base == ((Segment) o).base && length == > ((Segment) o).length; > } > public int compareTo(Segment other) { > int d = base - other.base; > if (d != 0) > return d; > return length - other.length; > } > } > } > > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.
