Benötige Hilfe Bei Fehler [Java+DB]

_uNdErScOre_

Grünschnabel
Hallo,

ich habe ein Problem in meinem Java Programm. Ich möchte folgendes tun:
1. Daten auslesen und in JTable darstellen
2. Daten ändern und in Access ändern.

Leider wirft er mir eine Nullpointer Exception:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at demo.anzeigenKontakt.Fenster_AnzeigenKontakt(anzeigenKontakt.java:35)
at demo.Hauptfenster.actionPerformed(main_adress.java:135)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
...

Code:
Z 35:    ResultSetMetaData md = rst.getMetaData();
Z 135:  obj1.Fenster_AnzeigenKontakt();

Zuvor stelle ich eine Verbidnung zur DB her usw. was auch zu klappen scheint, denn die Konsole spuckt mir vor der Exc. folgende Ausgaben aus.
Code:
Driver loaded!
Connection aufgebaut!
Query (Lesen) gesetzt!

Er hat also Probleme mit dem ResultSet, aber warum?
Ich bitte um Hilfe.

Mit freundlichen Grüßen
_underscore_

PS: Falls benötigt Quellcode der Klassen Datenbank und anzeigenKontakt
 
Zuletzt bearbeitet:
Hallo,

es liegt daran, dass das ResultSet in deiner Klasse anzeigenKonakt nicht initialisiert wird. Dein ResultSet in der Datenbank-Klasse wird befüllt, aber das fragst du ja nicht ab.

Du solltest es so lösen:

Lesen() in Klasse Datenbank
Java:
public boolean Lesen(String SQL, ResultSet rst){

	if(dbVerbindung == null){

		System.out.println("dbVerbindung == null");

		return false;

	}

	try{

		Statement stmt = dbVerbindung.createStatement(); 

		rst=stmt.executeQuery(SQL);

		System.out.println("Query gesetzt!");

	    return true;

	}

	catch(SQLException e)

	{

		System.out.println("DB-Verbindungsfehler: "+e);

		return false;

	}	

	

}

Java:
public void Fenster_AnzeigenKontakt(){	

		

		setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE ); 	

		

		Datenbank DaBank = new Datenbank();

		if(DaBank.Connect() == true){

			if(DaBank.Lesen("SELECT * FROM Kontakte", rst)==true){

				 try{

					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);

		            }

				

				}

				catch(SQLException r){

					System.out.println("DB-Verbindungsfehler: "+r);

				}

	        } 

	       

		DaBank.Disconnect();

		}

        

        JTable table = new JTable(data, columnNames);

    

        Container contentPane = getContentPane();

        contentPane.add(new JScrollPane(table), "Center");

        table.getModel().addTableModelListener(this);

			 

        setSize(600,400);

		setVisible( true ); 

	

		

	}

	public void tableChanged(TableModelEvent e) {

        int row = e.getFirstRow(); 

        int column = e.getColumn();

        TableModel model = (TableModel)e.getSource();

        String columnName = model.getColumnName(column);

        

        Object data = model.getValueAt(row, column);

        Object id = model.getValueAt(row, 0);

        String data_string = data.toString();

        String id_string = id.toString();

        System.out.println("ID: "+id_string);

        System.out.println("Daten: "+data_string);

        

        Datenbank DaBank = new Datenbank();

		if(DaBank.Connect() == true){

			//************************

			DaBank.Aendern(columnName, data_string, id_string);

			//************************

			DaBank.Disconnect();

		}

	}

MFG

zEriX
 
Wie es aussieht funktioniert es doch nicht so ganz wie ich dachte. :-(

So müsste es jetzt aber funktionieren.

Java:
package demo;



import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;





public class Datenbank{

	private Connection dbVerbindung;

	private Statement stmt = null;


        private ResultSet rst;
    
public boolean Connect(){

	try{

    	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

        System.out.println("Driver loaded!");

    }

    catch(ClassNotFoundException e){

	    System.out.println("error occured while loading driver!"+e);

	    return false;

	  

    }

    try{	

	    String Pfad = "Datenbank1.mdb";

	    dbVerbindung = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+Pfad);

	    System.out.println("Connection aufgebaut!");

	    return true;

    }

    catch(SQLException i){

		System.out.println("DB-Verbindungsfehler: "+i);

	    return false;

	   

    }

}

public boolean Disconnect(){

	try{

		System.out.println("\n");

	    dbVerbindung.close();

	    System.out.println("Connection Closed!");

	    return true;

	    }

	catch(SQLException e)

	{

		System.out.println("DB-Verbindungsfehler: "+e);

		return false;

	}	

}



public boolean Lesen(String SQL){



    if(dbVerbindung == null){



        System.out.println("dbVerbindung == null");



        return false;



    }



    try{



        Statement stmt = dbVerbindung.createStatement();

        rst=stmt.executeQuery(SQL);

        System.out.println("Query gesetzt!");



        return true;



    }



    catch(SQLException e)



    {



        System.out.println("DB-Verbindungsfehler: "+e);

    return false;



    }   



} 

public boolean Aendern(String columnName, String data_string, String id_string){

	if(dbVerbindung == null){

		System.out.println("dbVerbindung == null");

		return false;

	}

	try{

		if(stmt != null){

			Statement stmt = dbVerbindung.createStatement(); 

	    	stmt.execute("UPDATE Kontakte Set "+columnName+" = '"+data_string+"' WHERE ID = '"+id_string+"'");

	    	System.out.println("Daten in Access abgeaendert!");

		}else{

			System.out.println("stmt = null");

		}

		

	    return true;

	}

	catch(SQLException e)

	{

		System.out.println("DB-Verbindungsfehler: "+e);

		return false;

	}	

        public ResultSet getResultSet(){

             return rst;
        }
}

}


Java:
package demo;



import java.awt.Container;


import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.sql.SQLException;

import java.util.Vector;



import javax.swing.*;

import javax.swing.event.TableModelEvent;

import javax.swing.event.TableModelListener;

import javax.swing.table.TableModel;





class anzeigenKontakt extends JFrame implements TableModelListener  {



    private ResultSet rst = null;

    Vector columnNames = new Vector();

    Vector data = new Vector();

     

	public void Fenster_AnzeigenKontakt(){	

		

		setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE ); 	

		

		Datenbank DaBank = new Datenbank();

		if(DaBank.Connect() == true){

			if(DaBank.Lesen("SELECT * FROM Kontakte")==true){

				 try{
                                        rst =  DaBank.getResultSet();

					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);

		            }

				

				}

				catch(SQLException r){

					System.out.println("DB-Verbindungsfehler: "+r);

				}

	        } 

	       

		DaBank.Disconnect();

		}

        

        JTable table = new JTable(data, columnNames);

    

        Container contentPane = getContentPane();

        contentPane.add(new JScrollPane(table), "Center");

        table.getModel().addTableModelListener(this);

			 

        setSize(600,400);

		setVisible( true ); 

	

		

	}

	public void tableChanged(TableModelEvent e) {

        int row = e.getFirstRow(); 

        int column = e.getColumn();

        TableModel model = (TableModel)e.getSource();

        String columnName = model.getColumnName(column);

        

        Object data = model.getValueAt(row, column);

        Object id = model.getValueAt(row, 0);

        String data_string = data.toString();

        String id_string = id.toString();

        System.out.println("ID: "+id_string);

        System.out.println("Daten: "+data_string);

        

        Datenbank DaBank = new Datenbank();

		if(DaBank.Connect() == true){

			//************************

			DaBank.Aendern(columnName, data_string, id_string);

			//************************

			DaBank.Disconnect();

		}

	}

	

}


MFG

zEriX
 
Zurück