JTable befüllen

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,
ich habe folgendes problem ich will eine JTable mit Vectoren aus der Datenbank befüllen damit
sie beim ausführen Datensätze hat welche geändert, gelöscht usw. werden können. Nun hab
ich auch schon ein kleines programm, es kompiliert fertig aber beim starten kommt eine fehlermeldung
folgender Art: Fehler bei Tabellenabfrage java.sql.SQLException: Invalid handle
Die Exception wird bei der Abfrage selbst geworfen, also nicht bei der Treiber
Initialisierung oder sonstwas anderes, kann sich wer meiner annehmen

lG Fridolin

Code:
try 
      {    
      Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 
      } 
             
      catch( ClassNotFoundException event ) 
      {    
      System.out.println ( "Fehler bei ODBC-JDBC Treiber Initialisierung" + event ); 
      return; 
      }    
             
      Connection con02 = null; 
       Statement stmt02; 
       String url02 = "jdbc:odbc:Datenbank"; 
       ResultSet rSet02 = null; 
       String sqlQuery02 = "SELECT * FROM Datenbank;"; 
                
         try 
         { 
         con02 = DriverManager.getConnection( url02,"User","Password" ); 
         stmt02 = con02.createStatement(); 
         rSet02 = stmt01.executeQuery( sqlQuery02 ); 
         ResultSetMetaData metadata = rSet02.getMetaData(); 
         rows = new Vector(); 
            while( rSet02.next() ) 
            { 
            Vector newrow = new Vector(); 
             
            for(int a = 1; a <= metadata.getColumnCount(); a++) 
            { 
            newrow.addElement(rSet02.getObject(i)); 
            } 
            rows.addElement(newrow); 
             
            } 
             
            stmt02.close(); 
            Vector spalten = new Vector(); 
             //int numberOfColumns = metadata.getColumnCount(); 
            //for (int column = 0; column < numberOfColumns; column++) 
            //{ 
            // columnNames.addElement(metaData.getColumnLabel(column + 1)); 
            //} 
            spalten.addElement("ID"); 
            spalten.addElement("NAME"); 
            spalten.addElement("DAUER"); 
            spalten.addElement("ALTER"); 
       
            model = new DefaultTableModel(spalten, rows) 
            { 
               public boolean isCellEditable(int row, int col) 
               { 
                return false; 
                } 
            };    
             
            table = new JTable(); 
            table.setBounds(30,105,540,150); 
            table.setRowHeight(20); 
            table.setRowMargin(0); 
            table.setShowHorizontalLines(true); 
            table.setShowVerticalLines(true); 
            table.setGridColor(Color.black); 
            table.setSelectionForeground(Color.white); 
            table.setRowSelectionAllowed(true); 
            table.setColumnSelectionAllowed(false); 
            table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 
            table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
            table.addMouseListener(new Mausklasse()); 
            table.setModel(model); 
            ziehen = new JScrollPane(table); 
            ziehen.setBounds(30,105,540,150); 
             //int hpolicy = ziehen.getHorizontalScrollBarPolicy(); 
             //int vpolicy = ziehen.getVerticalScrollBarPolicy(); 
             ziehen.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
             ziehen.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
             panel.add(ziehen); 
         } 
                  
           catch( SQLException event) 
         { 
         System.out.println( "Fehler bei Tabellenabfrage " + event);    
         return; 
         }    
                   
            finally 
            { 
                      
                  try 
                  { 
                  if ( con02 != null ) 
                 { 
                 con02.close(); 
                  } 
                  } 
                      
                  catch ( SQLException event ) {} 
                       
             }
 

Mr. Floppy

Mitglied
ich meine du musst die tabelle angeben, nicht die datenbank.

SELECT * FROM <tabelle>; nicht SELECT * FROM <datenbank>

mit select werden tabellen abgefragt, wenn du den inhalt einer datenbank
wissen willst musst du "show tables" oder sowas nehmen.
 

P3AC3MAK3R

Top Contributor
Mr. Floppy hat gesagt.:
ich meine du musst die tabelle angeben, nicht die datenbank.

SELECT * FROM <tabelle>; nicht SELECT * FROM <datenbank>
Das kann ich nur bestätigen.

Code:
select * from [datenbank]

ist definitiv Unsinn.
 

baer1208

Aktives Mitglied
hy!

hab auchn problem mit d JTable!
alles gemacht...klassen aufgeteilt: Main, Gui, PanelTableGet, ModelGet, VideoControler, Video, Statements, ConnectionControler...gibt no mehr, aber für mein problem irrelevant!

in d gui steht nur das aussehn...BorderLayout.CENTER, BorderLayout.WEST (navigation) navi auch über JMenu...
mit klick auf "get" in d gui öffnet sich PanelTableGet (JInternalFrame...Observer,Observable)...da drinn hab ich jez nochmal nen button gemacht (get) dass er ne bestimmte query ausführt (querys werden in "Statements" durchgeführt...das ResultSet wird zum VideoControler hinzugefügt (in nen vector)...sodale...
bis jez ganz schön,nimm i halt an...angezeigt wird jedoch nichts...hab jez im ModelGet (implements TableModel) noch nen vector, dem der Inhalt aus dem Vector im VideoControler hinzugefügt wird...und dann sollte das doch in meiner JTable stehn,oder nicht???

nja...viel text...anbei noch code:
class VideoControler:
Code:
import java.util.*;
/**
*Video-Objekte werden in einer ArrayList gespeichert
*um weiters in der Gui ausgegeben werden zu können
*@author ...
*/
public class VideoControler
{
  private Vector videos;
  private int row;

  public VideoControler() { videos = new Vector(); }
    
  public void add(Video v) { videos.add(v); }
  
  public Video getByTitel(String titel){
    Iterator iterator = videos.iterator();
    while(iterator.hasNext()) {
      Video video= (Video)iterator.next();
      if (video.getTitel().equalsIgnoreCase(titel))
        return video;
    }
    return null;
  }
  
  public Object getVideoOutOfVector(int i) {
  	Video v = (Video)videos.get(i);
  	return v;
  }
  
  public void clearAL() { videos.clear(); }
  public int getRowCountO() { return videos.size(); }
}
Code:
import java.util.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import javax.swing.table.*;
import javax.swing.event.*;

/**
*JInternalFrame (JPanel): besteht aus einer JTable und 3 Buttons
*@author 
*/

public class PanelTableGet extends JInternalFrame //implements Observer{
	{
	static int openFrameCount = 0;
  static final int xOffset = 30, yOffset = 30;
	
	//private Model model = new Model();
	private JTable table1 = new JTable();//(model);
	private JScrollPane spane1 = new JScrollPane(table1);
	private VideoControler videoc;
	private ModelGet modelget;
	private Statements stmt;
	
	public PanelTableGet() {
		super("Get #" + (++openFrameCount), 
              true, //resizable
              true, //closable 
              true, //maximizable
              true);//iconifiable
    		
		JPanel contentPane;
		contentPane = (JPanel) this.getContentPane();
		contentPane.setLayout(new BorderLayout());		
		JPanel panel1 = new JPanel();
		initPanel(panel1);		
		contentPane.add(spane1, BorderLayout.CENTER);
		contentPane.add(panel1, BorderLayout.SOUTH);				
		//setWindowSize
		int inset = 100;
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setBounds(inset, inset,
                  screenSize.width  - inset*2,
                  screenSize.height - inset*2);		
		//Set the window's location.
    setLocation(xOffset*openFrameCount, yOffset*openFrameCount);
	}
	
	private void initPanel(JPanel p) {
		JButton okB = new JButton("ok");
		JButton getB = new JButton("get");
		JButton exportB = new JButton("export");
		JButton closeB = new JButton("close");
		
		closeB.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { close(e);	}
		});	
		getB.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { get(e); }
		});
		p.setLayout(new FlowLayout());
		p.add(getB);
		p.add(okB);
		p.add(exportB);
		p.add(closeB);
	}
	
	//Events
	private void get(ActionEvent e) {
		stmt.showVideo();
		//modelget = new ModelGet();
	}
	private void close(ActionEvent e) {
		openFrameCount--;
		this.dispose();
	}
	
}
Code:
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.util.*;
import java.awt.event.*;
import java.awt.*;

/**
*TableModel für PanelTableGet
*übernimmt die Anordnung von columns u rows für die JTable
*@author 
*/
class ModelGet implements TableModel {
	
	private Vector videos = new Vector();
	private Vector listeners = new Vector();
	private VideoControler videoc;
	
	public void addVideo(Video video) {
		//Index des Videos
		int index = videoc.getRowCountO();
		for (int in = 0 ; in < index; in++) {
			videos.add(videoc.getVideoOutOfVector(in));
		}
		
		//Listeners werden benachrichtigt
		//zuerst Event, "neue Row an der Stelle index" herstellen
		TableModelEvent e = new TableModelEvent (this, index, index, 
			TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
		//Event verschicken
		for(int i = 0, n = listeners.size();i<n;i++) {
			((TableModelListener)listeners.get(i)).tableChanged(e);
		}
	}
	//Anzahl Columns
	public int getColumnCount() { return 4; }
	//Anzahl Videos
	public int getRowCount() { return videoc.getRowCountO(); }
	
	public String getColumnName(int column) {
		switch(column) {
			case 0: return "id";
			case 1: return "titel";
			case 2: return "schauspieler";
			case 3: return "anzahl";
			default: return null;
		}
	}
	//Wert der Zeile (rowIndex, ColumnIndex)
	public Object getValueAt(int rowIndex, int columnIndex) {
		Video video = (Video)videos.get(rowIndex);
		
		switch(columnIndex) {
			case 0: return new Integer(video.getId());
			case 1: return video.getTitel();
			case 2: return video.getSchauspieler();
			case 3: return new Integer(video.getAnzahl());
			default: return null;
		}
	}
		
	//eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden soll
	public Class getColumnClass(int columnIndex) {
		switch(columnIndex) {
			case 0: return Integer.class;
			case 1: return String.class;
			case 2: return String.class;
			case 3: return Integer.class;
			default: return null;
		}
	}	
	public void addTableModelListener(TableModelListener l) { listeners.add(l); }	
	public void removeTableModelListener(TableModelListener l) { listeners.remove(l); }		
	public boolean isCellEditable(int rowIndex, int ColumnIndex) { return false; }		
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) { //nicht beachten 
	}
}
Code:
import java.sql.*;
import javax.swing.*;
import java.util.*;

/**
*hier stehen die statements,die ausgeführt werden
*@author
*/

public class Statements {
	
	Connection con;
	Statement stmt;
	ResultSet rs;
	VideoControler videoc;
	
	int id;
	String schauspieler;
	int anzahl;
	String titel;
		
	public Statements() {
		try { 
			ConnectionControler.getConnection();
		} catch (Exception e) {
				System.err.println(e);
		}
	}
	
	public void showVideo() {
		String query = "SELECT * FROM videos";
		try {
			stmt = con.createStatement();
			rs = stmt.executeQuery(query);			
			while(rs.next()) {
				id = rs.getInt("id");
				titel = rs.getString("titel");
				schauspieler = rs.getString("schauspieler");
				anzahl = rs.getInt("anzahl");
				Video video = new Video(id,titel,schauspieler,anzahl);
				videoc.add(video);				
			}
			rs.close();
			stmt.close();
		} catch (Exception e) {
				System.err.println(e); System.out.println("Fehler in showVideo()");
		}
	}
}
bitte schreibt mir keinen link zur FAQ...da hab ich schon nachgelesen, u nichts gefunden was mir dazu helfen kann...

meiner meinung liegt mein problem mit den vielen klassen...

tia
ciao baer
 

baer1208

Aktives Mitglied
hy!
weiß keiner ne antwort?
ich bekomm jetzt schon die tabellennamen angezeigt, doch nicht die inhalte der tabelle in der db...
alle bsp mit tables die ich bis jez gfundn hab san mit at time erzeugten objekten...nicht mit db-result sets...

bitte um hilfe! is echt wichtig!
kleiner ansatz wär super!! mehr will i net!
 

abollm

Top Contributor
P3AC3MAK3R hat gesagt.:
Mr. Floppy hat gesagt.:
ich meine du musst die tabelle angeben, nicht die datenbank.

SELECT * FROM <tabelle>; nicht SELECT * FROM <datenbank>
Das kann ich nur bestätigen.

Code:
select * from [datenbank]

ist definitiv Unsinn.

@P3AC3MAK3R:
Dann, wenn es kein so ansprechbares DB-Objekt mit dem Namen "Datenbank" gibt. Ansonsten kann das schon funktionieren. In Oracle oder MySQL erhält man bei ansonsten korrektem Code einen Fehler wie folgt:

Table or View does not exist...
Table 'mysql.datenbank' doesn't exist ...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L jTable mit Datenbankwerten befüllen Datenbankprogrammierung 7
E JTable mit Datenbankinhalt befüllen Datenbankprogrammierung 4
P JTable mit Daten aus MySQL befüllen mit Filterung Datenbankprogrammierung 3
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
H Tabellenspalte in JTable in der falschen Reihenfolge Datenbankprogrammierung 10
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
A SQLite jTable binding mit Netbeans Datenbankprogrammierung 11
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
M MySQL SQL Abfrage in JTable mit Berechnung Datenbankprogrammierung 3
L JTable-DB: Letzter wert wird nicht angezeigt. Datenbankprogrammierung 0
S MySQL jPMdbc&MySQL = Fehlerhafte Umlaute in JTable Datenbankprogrammierung 0
R HSQLDB Tabelle in JTable übertragen Datenbankprogrammierung 3
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
D von Datenbank in JTable füllen Datenbankprogrammierung 16
D JTable stellt DB da Datenbankprogrammierung 24
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Rudolf MySQL MySQL Tabelle mit Fremdschlüsseln in JTable darstellen Datenbankprogrammierung 5
E csv datei in JTable einlesen Datenbankprogrammierung 3
D ArrayIndexOutOfBoundsException bei Update von JTable und Model Datenbankprogrammierung 13
N MySQL MYSQL Inhalt an JTable übergeben. Datenbankprogrammierung 11
0 ResultSet in JTable Datenbankprogrammierung 14
M MySQL Table in Jtable integrieren Datenbankprogrammierung 26
B MySQL Row und ColumnIndex aus einer JTable (mysqlDb) selectieren Datenbankprogrammierung 18
M JTable änderung sofort auch in MySQL ändern. Datenbankprogrammierung 7
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
M SQL Abfrage in jTable einfügen Datenbankprogrammierung 8
oliver1974 JPA, JTable und 2 DB-Tabellen... Datenbankprogrammierung 2
K JTable mit JDBC verbinden Datenbankprogrammierung 5
D PostgreSQL Von JTable -> Datenbank Datenbankprogrammierung 6
T Recordsets in eine JTable einlesen mit Netbeans 6.0 Datenbankprogrammierung 2
N ID des Datensatzes aus JTable holen (nicht Index!) Datenbankprogrammierung 4
J Von Datenbank --> Vector --> JTable Problem Datenbankprogrammierung 6
J Klasse für Datensatzblättern in Verbindung mit JTable gesuch Datenbankprogrammierung 6
J jTable aktualisieren! Datenbankprogrammierung 2
V DB-Inhalt in JTable Datenbankprogrammierung 5
D Daten von Datenbank in JTable füllen... Datenbankprogrammierung 3
OnDemand Column char type, wie befüllen? Datenbankprogrammierung 2
S MySQL Befüllen von mehreren Spalten Datenbankprogrammierung 1
N String Array in While Schleife befüllen Datenbankprogrammierung 2
E Access Datenbank mit Insert befüllen Datenbankprogrammierung 5
GianaSisters MySQL INT Datenbankfeld gar nicht befüllen ?! Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
C MySQL Datenbank mit Hibernate befüllen Datenbankprogrammierung 5
M Tabellen gleichzeitig befüllen? Datenbankprogrammierung 3

Ähnliche Java Themen


Oben