# Spalten Namen auslesen und Zeilen daten auslesen



## Guest (17. Mrz 2007)

hi leute ich hab ne frage. wie kann ich die SpaltenNamen aus einer Access DB auszulesen und wie kann ich die daten einer zeile, die ich in einem jTable anzeige, auslesen und bearbeiten.

Hoffe jemand kann mir helfen


----------



## DocRandom (17. Mrz 2007)

Inselbuch  lesen!

lg
DocRandom


----------



## Guest (18. Mrz 2007)

hi danke für denn tipp doch ich hab noch eine frage?

Wenn ich aus einer Datebank alle daten auslese und sie in eine Tabele anzeigen lass, wie kann ich jetzt wenn ich eine bestimmte zeile markiere. denn inhalt der bestimmten zeile auslesen.

MfG gast


----------



## André Uhres (19. Mrz 2007)

Anonymous hat gesagt.:
			
		

> ..wie kann ich jetzt wenn ich eine bestimmte zeile markiere. denn inhalt der bestimmten zeile auslesen..




```
for (int column = 0; column < table.getColumnCount(); column++) {
    value = table.getValueAt(table.getSelectedRow(), column);
...
```


----------



## 4ak (19. Mrz 2007)

vielen herzlichen dank werde das dann ausprobieren.


----------



## 4ak (19. Mrz 2007)

also bei mir klappt das nicht, weis nicht wie ich das angehen soll. Will folgendes machen. 
Ich hab ne Tabel die daten aus einer access datenbank hat, und das klappt.
Jetzt will ich wenn ich eine zeile makiere und auf einen Button "bearbeiten" klicke das die daten aus der makierten zeile in jTextFields in einen neuen Fenster angezeigt werden. ich kann das ganze auch ganz gut compilen doch beim ausführen   bekomm ich die Fehlermeldung: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.
Ich liefer euch auch noch denn dazugehörigen Code, hoffe jemand kann mir helfen.

Coder der Datenbank anbindung:

```
import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Vector;
import javax.swing.JTable;

public class Datenanbindung {
    
    
    
    /** Creates a new instance of Datenanbindung */
     public void abfrage(String comBox,String ort,String textF) {
     	//String wert1 = a;
     	//String wert2 = b;
     	//String wert3 = c;
        
     	
        Vector columnNames = new Vector();
        Vector data = new Vector();
       try{
            //Abfrage definieren
            String query = "SELECT * FROM "+ort+" WHERE "+comBox+" LIKE '"+textF+"';";
            //Datenbankverbindung herstellen
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=G:/Users/mildi/Desktop/InMa/InmaBuchhandlung.mdb","","" );
            System.out.println("Connection Successful ");
            Statement stmt = con.createStatement();
            ResultSet rst = stmt.executeQuery(query);
            
            ResultSetMetaData md = rst.getMetaData();
            int columns = md.getColumnCount();
            //  Spaltennamen ermitteln
            for (int i = 1; i <= columns; i++) {
                String colname=md.getColumnName(i);
                columnNames.addElement( colname );
            }
            //  Zeileninhalt ermitteln
            while (rst.next()) {
                Vector row = new Vector(columns);
                for (int i = 1; i <= columns; i++) {
                    row.addElement( rst.getObject(i) );
                }
                data.addElement( row );
            }
           /*  while(rst.next())
        	Titel = rst.getString(Autor);
        	Autor = rst.getString(Titel);
        	ISBN = rst.getString(ISBN);
        	Verlag = rst.getString(Verlag);
        	Genre = rst.getString(Genre);
        	Erscheinungsjahr= rst.getString(Erscheinungsjahr);
        	Preis = rst.getString(Preis);
        	Bestand = rst.getString(Bestand);*/
        	
        	for (int spalten = 1; spalten < table.getColumnCount(); spalten++) {
    				Titel = table.getValueAt(table.getSelectedRow(), spalten);
        			Autor =table.getValueAt(table.getSelectedRow(), spalten);
        			ISBN=table.getValueAt(table.getSelectedRow(), spalten);
        	Verlag=table.getValueAt(table.getSelectedRow(), spalten);
        	Genre=table.getValueAt(table.getSelectedRow(), spalten);
        	ErJahr = table.getValueAt(table.getSelectedRow(), spalten);
        	Preis=table.getValueAt(table.getSelectedRow(), spalten);
        	Bestand=table.getValueAt(table.getSelectedRow(), spalten);
        	a=table.getValueAt(table.getSelectedRow(), spalten);
        	b=table.getValueAt(table.getSelectedRow(), spalten);
        	}
        	
        	
        	
        	
            //rst.close();
            //stmt.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
        
        //  Tabelle erzeugen
        table = new JTable(data, columnNames);
        
        
    }
    public JTable rückantw()
        {
        	return this.table;
        }
    
   public ResultSet rückrst() 
     {
     	
     		return this.rst;
     	
     }
    public void insert(String ort, String titel,String autor,String preis, String jahr, String genre, String isbn,String verlag, String bestand)
    {

        try{
        
        Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=G:/Users/mildi/Desktop/InMa/InmaBuchhandlung.mdb","","" );
      	String query ="INSERT INTO "+ort+" (Titel,Autor,Preis,Erscheinungsjahr,Genre,ISBN,Verlag,Bestand) VALUES ('"+titel+"','"+autor+"','"+preis+"','"+jahr+"','"+genre+"','"+isbn+"','"+verlag+"','"+bestand+"'); ";
        //String query ="INSERT INTO "+ort+" ("+colname+") VALUES ('"+titel+"','"+autor+"','"+preis+"','"+jahr+"','"+genre+"','"+isbn+"','"+verlag+"','"+bestand+"'); ";
        Statement stmt = con.createStatement();
        ResultSet rst = stmt.executeQuery(query);
        ResultSetMetaData md = rst.getMetaData();
       
        rst.close();
        stmt.close();
        
        }catch(Exception e) {
            e.printStackTrace();}
        
        
        }  
    
    public String getTitel()
    {
    	sTitel=Titel.toString();
    	return this.sTitel;
    }
    public String getAutor()
    {
    	sAutor = Autor.toString();
    	return sAutor;
    }
    public String getISBN()
    {
    	sISBN=ISBN.toString();
    	return sISBN;
    }
    public String getVerlag()
    {
    	sVerlag = Verlag.toString();
    	return sVerlag;
    }
    public String getGenre()
    {
    	sGenre= Genre.toString();
    	return sGenre;
    }
    public String getErJahr()
    { 
    	sErJahr = ErJahr.toString();
    	return sErJahr;
    }
    public String getPreis()
    {
    	sPreis = Preis.toString();
    	return sPreis;
    }
    public String getBestand()
    {
    	sBestand= Bestand.toString();
    	return sBestand;
    }
    
    //Variablen deklaration
    public	JTable table; 
    public ResultSet rst;
    Object Value;
    Object Titel;
    Object Autor;
        Object ISBN;
        Object Verlag;
        Object Genre;
        Object ErJahr;
        Object Preis;
        Object Bestand; 
        Object a;
        Object b;
        String sTitel;       
       	String sAutor;
       	String sGenre;
       	String sErJahr;
       	String sVerlag;
       	String sISBN;
       	String sPreis;
       	String sBestand;
}
```

und hier ist dann ein auschnitt vom  Fenster wo die daten dann im den jTextField gezeigt werden sollen.


```
import java.sql.ResultSet;
import java.sql.*;
public class BüchBe extends javax.swing.JFrame {
    
    /** Creates new form BüchBe */
    public BüchBe() {
        initComponents();
    }
    
    
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jTextField5 = new javax.swing.JTextField();
        jTextField6 = new javax.swing.JTextField();
        jTextField7 = new javax.swing.JTextField();
        jTextField8 = new javax.swing.JTextField();
        jLabel9 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jLabel1.setText("Titel");

        jLabel2.setText("Autor");

        jLabel3.setText("ISBN");

        jLabel4.setText("Verlag");

        jLabel5.setText("Genre");

        jLabel6.setText("Erscheinungsjahr");

        jLabel7.setText("Preis");

        jLabel8.setText("Bestand");

        jButton1.setText("Speichern");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
		Datenanbindung set = new Datenanbindung();
		
        jTextField1.setText(set.getTitel());

        jTextField2.setText(set.getAutor());

        jTextField3.setText(set.getISBN());

        jTextField4.setText(set.getVerlag());

        jTextField5.setText(set.getGenre());

        jTextField6.setText(set.getErJahr());

        jTextField7.setText(set.getPreis());

        jTextField8.setText(set.getBestand());
```

Hoffe jemand kann mir sagen wo der fehler liegt, denn ich hab keine ahnung.

MfG 4ak


----------



## André Uhres (19. Mrz 2007)

Versuch mal die JTable zu erzeugen, *ehe *du sie auswertest.


----------



## 4ak (19. Mrz 2007)

die wird doch in der Klasse Datenanbindung erzeugt, in zeile 80


----------



## André Uhres (19. Mrz 2007)

4ak hat gesagt.:
			
		

> die wird doch in der Klasse Datenanbindung erzeugt, in zeile 80


Genau, Auswertung: Zeile 57  :bae:


----------



## 4ak (19. Mrz 2007)

hab das jetzt so gemacht und es klappt immer noch nicht.


Hier haben ich die auswertung der zeil in der Klasse Bücher und mit der setMethode werden die gespeichert.

```
JTable tablee = sqlAbfrage.rückantw();
    for (int spalten = 0; spalten < tablee.getColumnCount(); spalten++) {
    				Titel = tablee.getValueAt(tablee.getSelectedRow(), spalten);
        			Autor =tablee.getValueAt(tablee.getSelectedRow(), spalten);
        			ISBN=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	Verlag=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	Genre=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	ErJahr = tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	Preis=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	Bestand=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	a=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	b=tablee.getValueAt(tablee.getSelectedRow(), spalten);
        	}
    Datenanbindung test = new Datenanbindung();
    test.setTitel(Titel);
    test.setAutor(Autor);
    test.setISBN(ISBN);
    test.setVerlag(Verlag);
    test.setGenre(Genre);
    test.setErJahr(ErJahr);
    test.setPreis(Preis);
    test.setBestand(Bestand);
```

hir sind die set- und get- Methoden in der Klasse Datenanbindung

```
public String getTitel()
    {
    	sTitel= Titel.toString();
    	return this.sTitel;
    }
    public String getAutor()
    {
    	
    	return sAutor;
    }
    public String getISBN()
    {
    	
    	return sISBN;
    }
    public String getVerlag()
    {
    	
    	return sVerlag;
    }
    public String getGenre()
    {
    	
    	return sGenre;
    }
    public String getErJahr()
    { 
    	
    	return sErJahr;
    }
    public String getPreis()
    {
    	
    	return sPreis;
    }
    public String getBestand()
    {
    	
    	return sBestand;
    }
    
   	public void setTitel (Object Titel)
   	{
   		sTitel=Titel.toString();
   	}
   	public void setAutor (Object Autor)
   	{
   		sAutor = Autor.toString();
   	}
   	public void setISBN (Object ISBN)
   	{
   		sISBN=ISBN.toString();
   	}
   	public void setVerlag (Object Verlag)
   	{
   		sVerlag = Verlag.toString();
   	}
   	public void setGenre (Object Genre)
   	{
   		sGenre= Genre.toString();
   	}
   	public void setErJahr (Object ErJahr)
   	{
   		sErJahr = ErJahr.toString();
   	}
   	public void setPreis (Object Preis)
   	{
   		sPreis = Preis.toString();
   	}
   	public void setBestand (Object Bestand)
   	{
   		sBestand= Bestand.toString();
   	}
```

und dann im fenster wo sie ausgegeben werden sollen. das ist das die Klasse BüchBe

```
Datenanbindung set = new Datenanbindung();
		
        jTextField1.setText(set.getTitel());

        jTextField2.setText(set.getAutor());

        jTextField3.setText(set.getISBN());

        jTextField4.setText(set.getVerlag());

        jTextField5.setText(set.getGenre());

        jTextField6.setText(set.getErJahr());

        jTextField7.setText(set.getPreis());

        jTextField8.setText(set.getBestand());
```


----------



## André Uhres (19. Mrz 2007)

Dein Problem ist wahrscheinlich immer dasselbe: du musst darauf achten, 
daß die Referenzen auf ein vorher erzeugtes Objekt zeigen. 
Ich nehme an, daß du wieder eine NullPointerException hast.
Das heisst, daß eine Referenz nicht initialisiert wurde (möglicherweise "sqlAbfrage" ?) .


----------



## 4ak (19. Mrz 2007)

jo stimmt wieder die selbe fehlermelung. hast du einen kleinen tipp wie ich das lösen kann.


----------



## André Uhres (19. Mrz 2007)

Versuch's mal mit debuggen.


----------



## 4ak (20. Mrz 2007)

ich sowas noch nie gemacht was muss ich genau machen
hab das mit eclips schonmal durchgeführt und dann gibt er mir folgend meldung : Thread[AWT-EventQueue-0,6,main]
kannst du damit was anfangen?


----------



## André Uhres (20. Mrz 2007)

4ak hat gesagt.:
			
		

> ich sowas noch nie gemacht was muss ich genau machen..


Wenn du's simpel machen willst:

```
System.out.println("x: "+x);
```
Gib auf diese Weise an passenden Stellen die relevanten Variablen aus.
Dann siehst du wo das Ding lang läuft und was es alles so macht.


----------



## Guest (21. Mrz 2007)

hi das mit debuggen geht irgendwie nicht weis nicht genau was ich machen soll. hab jetzt auch ein anderes Prolbem. bei mir geht die next() methode irgendwie nicht. bekomm die daten aus dem resultSet nicht raus. hier ist der code. Die Methode next ist in zeile 62. die werte sollen als String gespeichert werden und dann mit den Get-Methoden wieder ausgegeben werden, geht aber nicht richtig.

Hoffe jemand kann mir bitte helfen.


```
import java.sql.*;

public class BuWerte
{
	private String ort = "Bücher";
	private String comBox;
	private String textF;
	public String textB;
	private ResultSet rst;
	
	public void setComBox(Object jcom)
	{
			 comBox = (String) jcom;
	}
	
	public void setTextF(String TextFi)
	{
		textF = TextFi;
		
	}
	public void setTextB(String Textfa)
	{
		textB = Textfa;
	}
	
	public String getOrt()
	{
		return ort;
	}
	
	public String getComBox()
	{
		return comBox;
	}
	
	public String getTextF()
	{
		return textF;
	}
	public String getTextB()
	{
		return textB;
	}
	
	public void setRst(String text)
	{	
		String textf = "%"+text+"%";
		
	
	
	try{
	
	String //query = "SELECT * FROM "+ort+" WHERE "+comBox+" LIKE '"+textf+"';";
			query = "SELECT * FROM Bücher WHERE ISBN LIKE '"+textf+"';";
            //Datenbankverbindung herstellen
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con=DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=G:/Users/mildi/Desktop/InMa/InmaBuchhandlung.mdb","","" );
            System.out.println("Connection Successful ");
            Statement stmt = con.createStatement();
            ResultSet rst = stmt.executeQuery(query);
            while (rst.next())
        {
        
        String	Titel= rst.getString("Titel");
        String	Autor= rst.getString("Autor");
        String	ISBN = rst.getString("ISBN");
        String	Verlag = rst.getString("Verlag");
        String	ErJahr = rst.getString("Erscheinungsjahr");
        String	Genre = rst.getString("Genre");
        String	Preis = rst.getString("Preis");
        String	Bestand = rst.getString("Bestand");
        String	a = rst.getString(9);
        String	b = rst.getString(10);
        }
            
            } catch(Exception e) {
            e.printStackTrace();
        }
        
	}
	
	public ResultSet getRst()
	{
		return rst;
	}
	String Autor;
		String Titel;
		String ISBN;
		String Verlag;
		String Genre;
		String ErJahr;
		String Bestand;
		String Preis;
		String a;
		String b;
	
	public String getTitel()
    {
    	
    	return this.Titel;
    }
    public String getAutor()
    {
    	
    	return Autor;
    }
    public String getISBN()
    {
    	
    	return ISBN;
    }
    public String getVerlag()
    {
    	
    	return Verlag;
    }
    public String getGenre()
    {
    	
    	return Genre;
    }
    public String getErJahr()
    { 
    	
    	return ErJahr;
    }
    public String getPreis()
    {
    	
    	return Preis;
    }
    public String getBestand()
    {
    	
    	return Bestand;
    }
}
```


----------



## André Uhres (21. Mrz 2007)

Lass den folgenden Code mal weg, möglicherweise existieren diese Spalten nicht, das gibt dann eine SQLException:

```
String   a = rst.getString(9);
        String   b = rst.getString(10);
```
Ansonsten müsste dein Code funktionieren.

EDIT: Damit auch die Getter funktionieren, darfst du die Properties 
in der while-Schleife nicht lokal definieren, d.h. die "String" Schlüsselwörter müssen dort weg.


----------



## Guest (21. Mrz 2007)

vielen vielen vielen dank für die hilfe, es klappt jetzt.

MfG 4ak


----------

