[java] Hoe krijg ik een ResultSet zsm in JTable ?

Pagina: 1
Acties:

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Hoe krijg ik een java.sql.ResultSet zo snel mogelijk in een JTable ?? Ik had geen zin om per cel value's te gaan toewijzen emt for-loopjes, leek me een beetje traag.
Wie helpt mij uit de brand ??

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zal je matsen ;) .
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

public class QueryResultModel extends AbstractTableModel
{
    private List colNames;
    private String[][] data;
    private int [] maxChars;
    private int nrCols;
    private int nrRows;

    public QueryResultModel(ResultSet rs) throws SQLException
    {
        colNames = DatabaseTools.getColumnNames(rs);
        nrCols   = colNames.size();

        nrRows  = 0;
        ArrayList dataList = new ArrayList();
        while(rs.next())
        {
            for(int i = 1; i < (nrCols + 1); i++)
            {
                dataList.add(rs.getString(i));
            }
           nrRows++;
        }
            
        data = new String[nrRows][nrCols];
        int index=0;
       for(int i=0;i<nrRows;i++)
        {
            for(int j=0;j<nrCols;j++)
            {
                data[i][j] = (String)dataList.get(index);
                index++;
            }
        }
    }

    public int getRowCount()
    {
        return nrRows;
    }

    public int getColumnCount()
    {
        return nrCols;
    }

    public String getColumnName(int columnIndex)
    {
        return (String) colNames.get(columnIndex);
    }

    public Object getValueAt(int rowIndex,int columnIndex)
    {
        return data[rowIndex][columnIndex];
    }
}

Die aanroep van DatabaseTools moet je zelf nog maar even implementeren als dat nodig is.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Overigens ontkom je niet aan die for-loopjes... Traag is het ook niet. De data moet toch uit de ResultSet worden gehaald.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Overigens kan het nog wel een stuk sneller dan wat ik hier doe als je een goede JDBC driver hebt....

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Maar nu krijg ik een NullPointerException...
ik heb de QueryResultSet Serializable gemaakt en ik heb ipv DatabaseTools de ResultSetMetaData toegepast om het aantal kolommen en de kolomnamen te achterhalen. Op verzoek zal ik de code daarvan hier posten.

[edit]
Ik gebruik de JDBC driver voor MySQL van Mark Matthews van www.mysql.com.
[/iedt]

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Nou niemand heefte r tot nog toe om gevraagd maar hier is de aangepaste code van de QueryResultModel :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package com.md.jdb;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import java.io.Serializable;

public class QueryResultModel extends AbstractTableModel implements Serializable {
    private List colNames;
    private String[][] data;
    private int [] maxChars;
    private int nrCols;
    private int nrRows;

    public QueryResultModel(ResultSet rs) throws SQLException {
        ResultSetMetaData DatabaseTools = rs.getMetaData();
            for(int a=1;a<=DatabaseTools.getColumnCount();a++) {
                colNames.add(DatabaseTools.getColumnName(a));
            }
            
        nrCols   = colNames.size();
        nrRows  = 0;
        ArrayList dataList = new ArrayList();
        while(rs.next())
        {
            for(int i = 1; i <=(nrCols); i++)
            {
                dataList.add(rs.getString(i));
            }
           nrRows++;
        }
            
        data = new String[nrRows][nrCols];
        int index=1;
       for(int i=1;i<nrRows;i++)
        {
            for(int j=1;j<nrCols;j++)
            {
                data[i][j] = (String)dataList.get(index);
                index++;
            }
        }
    }

    public int getRowCount()
    {
        return nrRows;
    }

    public int getColumnCount()
    {
        return nrCols;
    }

    public String getColumnName(int columnIndex)
    {
        return (String) colNames.get(columnIndex);
    }

    public Object getValueAt(int rowIndex,int columnIndex)
    {
        return data[rowIndex][columnIndex];
    }
}

Waar precies de fout zit zegtie niet, hij geeft wel een stacktrace maar er staat bij de eerste 3 regels "unknown source" in plaats van een regelnummer :)

  • reddog33hummer
  • Registratie: Oktober 2001
  • Laatst online: 24-08 18:08

reddog33hummer

Dat schept mogelijkheden

je kan ook prepared statements gebruiken en dan een fetchcount hoog zetten.

Dan kan je in 1 keer de hele tabel ophalen.

Backup not found (R)etry (A)bort (P)anic<br\>AMD 3400+ 64, 2 GB DDR, 1,5 TB Raid5


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hij werkt hier gewoon al enkele jaren, dus ik heb geen idee waarom dat bij jou niet zo zou zijn :) . Post toch je stack-trace eens?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hum ja, duh.... misschien moet je colNames even intialiseren??

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Hier is de code van de aanroep naar DatabaseTools:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public static List getColumnNames(ResultSet rs) throws SQLException
{
    ResultSetMetaData meta = rs.getMetaData();
    int nrCols = meta.getColumnCount();
    List result = new ArrayList(nrCols);

    for(int i = 1; i <= nrCols; i++)
    {
        result.add(meta.getColumnName(i));      
    }

    return result;
}

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
bdnkt allemaal :) ga nu weer vrolijk verder proggen... dat heb ik nou altijd na het eten... dan sluipen er van die kleine foutjes in mijn code... vitaminepillen ??? ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MisterData: vitaminepillen ??? ;)
Nee: sterke koffie ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
JAVA ??? waar verkopen ze dat in Nederlands ??? ;)
Pagina: 1