# SQL Abfrage in jTable einfügen



## MTH_1981 (8. Mai 2009)

Hallo an das Froum,

bin in Sachen Java noch relativer Neuling und habe gerade Probleme beim Füllen einer JTable mit einer SQL Abfrage und dem TabelModell.
Habe keine Ahnung wie ich das anstellen soll ich habe drei Klassen.

1 Klasse für DB Connection
2 Klasse für das Abstract Table Model
3 Klasse für GUI und Tabelle
4 Klasse Main Klasse für Start


DB Klasse:

```
import java.sql.*;

public class DB {
	private Connection connection;

	public DB() throws ClassNotFoundException, SQLException{
		Class.forName("com.mysql.jdbc.Driver");
		connection = DriverManager.getConnection("jdbc:mysql://IPAdresse/Artikel","user","pw");
		Statement stm = connection.createStatement();
		
	}

	public ResultSet abfrage(String abfrage) throws SQLException{
		Statement stm = connection.createStatement();
		return stm.executeQuery(abfrage);
		
	}
}
```

Klasse für Abstract table Model

```
import javax.swing.table.AbstractTableModel;
import java.sql.*;
import java.util.Vector;

public abstract class TabellenModellGUI extends AbstractTableModel {
	
	private DB db1;
	String kopf[] = {"Artikel-ID", "Artikel", "Preis"};
	
	
	public TabellenModellGUI() throws Exception, SQLException{
		
	}
	
	
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return kopf.length;
	}

	
	
	@Override
	public String getColumnName(int i) {
		// TODO Auto-generated method stub
		return kopf[i];
	}


	@Override
	public int getRowCount() {
		return 0;

	}

	@Override
	public Object getValueAt(int row, int col) {
               return null;
       }

	
    public boolean isCellEditable(int row, int col) {
        return false;
    }


}
```

In der anderen klasse verbinde ich dann nur das TabellenMODELL mit der jTable und in der Main Klasse gebe ich es aus.

Mein Frage wäre nun ich will eine Abfrage auf die Tabelle tbl_Artikel machen aber mein Problem ist wie fülle ich die Tabelle mit dem RecordSet bei GetValueAT.
Weiß nicht so recht wie ich das anstellen soll.

Wäre dankbar wenn viell jemand einen Tipp hat wo ich das machen kann mit dem befüllen.
Tu mich gerade mit dem Denken in objekten noch ein wenig schwierig.

Danke im Vorraus für Hilfe


----------



## sparrow (8. Mai 2009)

Könntest du bitte genauer spezifizieren was genau nicht geht?

Mögliche Antworten die mir einfallen:

1) Zur Übunng ist es vielleicht ganz sinnvoll erst einmal das "DefaultTableModel" zu verwenden. Wenn das dann geht kann man sein eigenes bauen.
2) Um von einer Klasse auf Inhalte einer anderen zuzugreifen braucht man dort ein Objekt das entsprechend verweist.


----------



## MTH_1981 (8. Mai 2009)

Hey sparrow,

vielen Dank für deine Antwort.
Ich will eine Abfrage machen wo mir die Artikel aus der Tabelle auflistet mit folgender Abfrage:


```
Statement stm = connection.createStatement();
ResultSet rs = stm.executeQuery("select AID, Artikelbeschreibung, Preis from tbl_Artikel order by AID");
```

wie schaffe ich es nun das Ergebnis dieser Abfrage in die Tabelle bekomme. Normal gebe ich es ja folgender maßen auf der Console aus:


```
System.ou.println(rs.getInt("AID"));
System.ou.println(rs.getString("Artikelbeschreibung"));
System.ou.println(rs.getDouble("Preis"));
```

Das Ergebnis der Abfrage muss ich doch irgendwie in die Methode

```
public Object getValueAt(int row, int col) {
		return null;
       }
```

bekommen aber ich weiß leider nicht wie ich das anstelle.


----------



## Taramsis (8. Mai 2009)

wie Sparrow schon meint würde ich auch ein DefaultTableModelbenutzen

```
chooseValueTable = new javax.swing.JTable();
chooseValueTable.setName("bla");
jScrollPane1.setViewportView(chooseValueTable);
tabelenName.setModel(new javax.swing.table.DefaultTableModel(this.XMethode, die dein Resultset beinhaltetX, this.header())
            {
                public boolean isCellEditable(int row, int column)
                {
                    return false;
                }
            } );
```

Ich empfehle dir grad für Einsteiger Netbeans!


----------



## MTH_1981 (8. Mai 2009)

Meinst du Download der NetBeans IDE ??

Aktuelle lerne ich gerade alles mit Eclipse.


----------



## Taramsis (8. Mai 2009)

genau eigentlich genau so nur, dass man einen sehr einsteigerfreundlichen SwingEditor hast


----------



## homer65 (8. Mai 2009)

Mal ein Beispiel wie bei mir so ein TableModel aussieht:

```
package pack;
import java.util.*;
import javax.swing.table.*;
import java.sql.*;
public class JournalModel extends AbstractTableModel 
{
	static final long serialVersionUID = 1;
	String[] columnNames = new String[8];
	ArrayList<JournalSatz> al = new ArrayList<JournalSatz>();
	public JournalModel()
	{
		DB2 db2 = new DB2();
		ResultSet rs = db2.selectJournal(Global.con);
		if (rs != null)
		{
			JournalSatz ts = db2.NextJournal(rs);
			int anz = 0;
			while (ts != null)
			{
				al.add(ts);
				ts = db2.NextJournal(rs);
				anz++;
				if (anz > Parameter.maxJournal) ts = null;
			}
		}
		columnNames[0] = "Datum";
		columnNames[1] = "Benutzer";
		columnNames[2] = "Funktion";
		columnNames[3] = "CUU";
		columnNames[4] = "Volid";
		columnNames[5] = "Model";
		columnNames[6] = "Gebiet";
		columnNames[7] = "Beschreibung";
	}
	public Object getValueAt(int row,int col)
	{
		JournalSatz ts = al.get(row);
		Object o = new Object();
		if (col == 0)
		{
			o = ts.getDatum();
		}
		if (col == 1)
		{
			o = ts.getBenutzer();
		}
		if (col == 2)
		{
			o = ts.getFunktion();
		}
		if (col == 3)
		{
			o = ts.getCuu();
		}
		if (col == 4)
		{
			o = ts.getVolid();
		}
		if (col == 5)
		{
			int id = ts.getModell_id();
			ModellSatz gs = Global.modell.getById(id);
			o = gs.getName();
		}
		if (col == 6)
		{
			int id = ts.getGebiet_id();
			GebietSatz gs = Global.gebiet.getById(id);
			o = gs.getTyp();
		}
		if (col == 7)
		{
			o = ts.getKommentar();
		}
		return o;
	}
	public int getRowCount()
	{
		int i = al.size();
		return i;
	}
	public int getColumnCount()
	{
		int i = 8;
		return i;
	}
	public String getColumnName(int col)
	{
		return columnNames[col];
	}
	public void setValueAt(Object value,int row,int col)
	{
		
	}
	public boolean isCellEditable(int row,int col)
	{
		return false;
	}
}
```


----------



## sparrow (8. Mai 2009)

Taramsis hat gesagt.:


> genau eigentlich genau so nur, dass man einen sehr einsteigerfreundlichen SwingEditor hast



Gerade am Anfang ist es aber gut es eben _nicht_ durch einen Editor bauen zu lassen sondern selber den Code zu schreiben.


----------



## Taramsis (8. Mai 2009)

Sparrow hat schon recht! Ich persönlich konnte aber durch Netbeans viel über Swing lernen!


----------

