You are not logged in.

  • Login

1

Monday, July 6th 2009, 5:20pm

ResultSet via Vector - Klasse in JTable schreiben

hi!

ich versuche mittels Vector-Klasse ein Resultset in eine jtable zu schreiben, mit einer LinkedHashMap hat es geklapt, jedoch wirft der Vector mir immer Fehler entgegen :)

Hier der Code:

Java Quellcode

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import java.sql.*;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
 
 
public class TableVector extends DefaultTableModel {
    Connection con;
 
    Statement stmt;
 
    ResultSet rs;
 
    ResultSetMetaData rsmd;
 
    Vector tableAll = new Vector();
 
    Vector rowContent = new Vector();
 
    int colCount;
 
    Vector hans = new Vector();
 
public TableVector(){
 
try {
 
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
 
} catch (ClassNotFoundException e) {
 
// TODO Automatisch erstellter Catch-Block
 
e.printStackTrace();
 
}
 
try
{
            String connectionUrl = "jdbc:sqlserver://dbserver:1433;"+
                    "databaseName=XXXX;user=XXXX;password=XXX;";
            con = DriverManager.getConnection(connectionUrl);
 
stmt = con.createStatement();
 
rs = stmt.executeQuery("SELECT * FROM HM");
 
rsmd = rs.getMetaData();
 
colCount = rsmd.getColumnCount();
 
} catch (SQLException e1) {
 
// TODO Automatisch erstellter Catch-Block
 
e1.printStackTrace();
 
}
 
try {
 
while(rs.next()){
 
for(int m = 0; m < colCount; m++){
 
rowContent.add(rs.getString(m + 1));
System.out.print(rs.getString(m + 1));
 
}
 
tableAll.addElement(rowContent);
 
rowContent.clear();
 
}
 
} catch (SQLException e) {
 
// TODO Automatisch erstellter Catch-Block
 
e.printStackTrace();
 
}
 
}
 
@Override
public Object getValueAt(int arg0, int arg1)
{
    try{
 
    hans =  (Vector) tableAll.get(arg1); // Casting
    return hans.get(arg0);
    }
    catch (ArrayIndexOutOfBoundsException ex){ 
        return 0;
    }
    }
 
                @Override
		public int getColumnCount()
		{ 
                  return colCount;
                }
 
                @Override
                public int getRowCount()
                {
 
                return 10; //testweise
 
                }
 
}


Dieser Teil:
public Object getValueAt(int arg0, int arg1)

Java Quellcode

1
2
3
4
5
6
7
8
9
{
    try{
 
    hans =  (Vector) tableAll.get(arg1); // Casting
    return hans.get(arg0);
    }
    catch (ArrayIndexOutOfBoundsException ex){ 
        return 0;
}


scheint nicht richtig zu funktionieren, obwohl der Vector die Daten enthält, wird wohl immer eine ArrayIndexOutofBound - Exception rausgehauen, so dass alle Spalten 0 sind, wegen dem return. Wenn ich kein Try und Catch ein baue kommt die Meldung halt direkt ->

Quoted

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0

Könnt ihr mir irgendwie helfen?

Vielen Dank

2

Tuesday, July 7th 2009, 6:25pm

hi,
erstmal die offensichtliche frage wenn man sich nicht damit auskennt: sicher, dass es nicht erst arg0, dann arg1 sein muss?

Java Quellcode

1
2
hans =  (Vector) tableAll.get(arg0); // Casting
return hans.get(arg1);


ansonsten wie groß ist das array?

Java Quellcode

1
return hans.size()

3

Friday, July 10th 2009, 10:03am

Vielen Dank erstmal, durch Debuggen konnte ich das Problem erstmal eingrenzen, aber es wird verwirrender :)

Also sobald

Java Quellcode

1
rowContent.clear

aufgerufen wird, wird tableAll ebenfalls geleert, die size ist noch so hoch wie die hinzugefügte Elemente, jedoch sind die Inhalte weg. Wenn ich RowContent.clear entferne, wird logischerweise immer nur der Index 0 übertragen.
Ich habe keine Ahnung warum der Aufruf rowContent.clear die Inhalt von tableAll mit verwirft?!?

4

Friday, July 10th 2009, 6:28pm

Java Quellcode

1
2
tableAll.addElement(rowContent);
rowContent.clear();

Ja, warum machst du das denn überhaupt? Instanziier dir doch lieber für jede Zeile ein neues rowContent.
Und noch besser. Arbeite mit Generics.

Aber nochmal zur Erläuterung. Was hat an deiner funktionierend LinkedHashMap nicht funktioniert?

5

Monday, July 13th 2009, 8:29am

Hi!

Das mit der LinkedHashmap hat funktioniert, hatte nur gelesen, dass viele es mit der Vector-Klasse durchführen, daher wollte ich es auch mal probieren.

Similar threads

Social bookmarks