Databasekald -> JTabel
Jeg har skrevet et program som skal hente data fra en database og vise det i en JTabel.Databasen er MySQL og kaldet er lavet ved hjælp af disky's handler som i sikkert kender (se evt. http://www.eksperten.dk/spm/253487).
Kaldet virker fint - dataen bliver hentet og bliver lagt korrekt ned i vektoren - det er testet. Problemet opstår idet JTabel'en skal laves:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
public class firstDB {
Vector data,top;
public static void main(String[] args) {
// Laver liste over adresser i en vector: data
// ----------------------------------------------------------
// Laver en database-forbindelse
Database db = new Database();
db.open();
// Laver forespørgelsen
ResultSet res = db.doQuery("SELECT Adresse, id FROM huseftersyn LIMIT 40");
Vector data = new Vector();
Vector top = new Vector();
try {
while(res.next()) {
// skal indsættes på en eller anden måde: res.getInt("id"),
data.addElement(new String(res.getString("Adresse")));
}
} catch(SQLException e) {
}
// Lukker database-forbindelsen
db.close();
// Laver GUI'er
// ----------------------------------------------------------
// Sætter LookAndFeel
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) { }
// Laver windue og panel
JFrame frame = new JFrame("Mit første database-program");
JPanel pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));
// Definere tabelens overskrifter
// top.addElement("ID");
top.addElement(new String("Adresse"));
// Test - som retunere korrekt
// pane.add(new JLabel("Vector data: " + data.toString()));
// pane.add(new JLabel("Vector top: " + top.toString()));
// Laver tabelen
JTable tabel = new JTable(data, top);
tabel.setPreferredScrollableViewportSize(new Dimension(200, 70));
pane.add(tabel);
// Tilføjer panelet til vinduet
frame.getContentPane().add(pane);
// Afslutter opsætningen af winduet og viser det
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Fejlen:
C:\java\db>javac firstDB.java
C:\java\db>java firstDB
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at javax.swing.table.DefaultTableModel.justifyRows(DefaultTableModel.jav
a:238)
at javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.j
ava:194)
at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:131
)
at javax.swing.JTable.<init>(JTable.java:392)
at firstDB.main(firstDB.java:62)
Det skal lige siges at dette er mit første Java-program (hvis man ser bort fra hello worlds ol.). Alle forslag til forbedring er velkomne. Bør jeg f.eks. prøve at være mere objekt-orienteret og hvordan?