Fehler in der Datenbankklasse

Status
Nicht offen für weitere Antworten.

alaska94

Aktives Mitglied
Hallo Leute,

ich wollte mir eine Datenbankklasse bauen.
Mein Konzept ist wie folgt.
Ich habe ein Klasse Connect die die ganze Verbindungen aufbaut.
Dann habe ich eien Klasse Datenabnk die für Abfragen etc zuständig ist.
Dann habe ich eine Kasse Module, wo ich alle Abgragen für mein Gästebuch brauche.
Und dann noch eine Mai, wo ich das Programm mit starte.
Wenn ich es starte erscheint folgende Meldung.

Exception in thread "main" java.lang.NullPointerException
at Gaestebuch.Datenbank.hole_query(Datenbank.java:32)
at Gaestebuch.LeseModule.get_Beitraege(LeseModule.java:17)
at Gaestebuch.Haupt.main(Haupt.java:13)

Hier mein Quellcode:
Code:
package Gaestebuch;

public class Connect {
	private String treiber;

	private String verbindung;

	private String host;

	private String user;

	private String password;

	private String datenbankname;

	// Diese Methode setzt die Treiber
	public void setze_treiber(String wert) {
		if (wert == "sql") {
			this.treiber = "com.mysql.jdbc.Driver";
		}
	}

	// Diese Methode sendet die Treiberdaten
	public String nehme_treiber() {
		return (this.treiber);
	}

	public void setze_verbindung(String wert) {
		if (wert == "sql") {
			this.verbindung = "jdbc:mysql://" +  this.host+ "/" + this.datenbankname;
		}
	}

	public String nehme_verbindung() {
		return this.verbindung;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getDatenbankname() {
		return datenbankname;
	}

	public void setDatenbankname(String datenbankname) {
		this.datenbankname = datenbankname;
	}

}
Code:
package Gaestebuch;

import java.sql.*;
import java.util.HashMap;
import java.util.Vector;

public class Datenbank extends Connect {
	
	private Connection con;
	private Statement state;
	private ResultSet result;
	
	//Diese Methode baut eine Verbindung zur Datenbank auf
	protected void verbindung(){
		try {
			Class.forName(this.nehme_treiber());
		} catch (ClassNotFoundException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
		try {
			con=DriverManager.getConnection(this.nehme_verbindung(),this.getUser(),this.getPassword());
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
	}
	
	//Diese Methode wird für Select Statements verwendet
	protected void hole_query(String abfrage){
		try {
			this.result=state.executeQuery(abfrage);
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
		
	}
	
	//Diese Methode wird für Insert und Update Statements verwendet
	protected void schreibe_query(String abfrage){
		
		try {
			state.executeUpdate(abfrage);
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
	}
	
	//Diese Methode schließt die Verbindung zur Datenbank
	protected void schliesseVerbindung(){
		try {
			state.close();
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
		try {
			con.close();
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
		
	}
	
	//Diese Methode wird verwendet, wenn 1 oder mehr Datensätze aus der Tabelle geholt wird
	protected Vector fetchAsVector() {
		Vector results = new Vector();
		try {
			ResultSetMetaData metaData = result.getMetaData();
			int anzSpalten = metaData.getColumnCount();
			while (result.next()) {
				HashMap row = new HashMap();
				for (int i = 1; i != anzSpalten + 1; i++) {
					Object obj = result.getObject(i);
					String name = metaData.getColumnName(i);
					name = name.toUpperCase();
					row.put(name, obj);
				}
				results.add(row);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return results;

	}
	
	//Diese Methode wird verwendet, wenn ein Datenasatz aus der Tabelle geholt wird
	protected HashMap fetchasHash(){
		HashMap resultat=new HashMap();
		ResultSetMetaData metaData;
		try {
			metaData = result.getMetaData();
			int anzSpalten = metaData.getColumnCount();
			result.first();
			for (int i = 1; i != anzSpalten + 1; i++) {
				Object obj = result.getObject(i);
				String name = metaData.getColumnName(i);
				name = name.toUpperCase();
				resultat.put(name, obj);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return resultat;
	}
	
}
Code:
package Gaestebuch;

import java.util.Vector;
public class LeseModule extends Datenbank{
		
	public void verbindungsaufbau(){
		this.setHost("localhost");
		this.setUser("root");
		this.setPassword("12345");
		this.setDatenbankname("java");
		this.setze_verbindung("sql");
		this.setze_treiber("sql");
	}
	
	public void get_Beitraege(){
		String abfrage="Select * from test";
		this.hole_query(abfrage);
		Vector vec=this.fetchAsVector();
		for(int i=0;i<vec.size();i++){
			System.out.println(vec.elementAt(1)+"\t");
		}
	}
		
}
Code:
package Gaestebuch;


public class Haupt {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Automatisch erstellter Methoden-Stub
		LeseModule lesen=new LeseModule();
		lesen.verbindungsaufbau();
		lesen.get_Beitraege();
	}

}
Was ist falsch??

Gruß

alaska[/quote]
 

alaska94

Aktives Mitglied
Mhm ok, also die SQL Abfrage habe ich jetzt überprüft die stimmt.
Habe ich denn ein Logicfehler oder etwas ähnliches drin??


Gruß
 

SamHotte

Top Contributor
Logikfehler nicht unbedingt. Aber wenn der Verbindugsaufbau scheitert, arbeitet das Programm trotzdem weiter, da die Exceptions nicht weiter beachtet werden. Und dann sind eben manche Objekte gleich null, statt vernünftig initialisiert zu sein.
 

SamHotte

Top Contributor
Lösungsansatz: alle Methoden der Klasse Datenbank könnten einen booleschen Wert zurückgeben - true, wenn erfolgreich, false, wenn die Exception auftrat.

Diese Wert fragt man dann ab, eh man den nächsten Schritt tut.
 

alaska94

Aktives Mitglied
Mhm also ich habe deinen Rat befolgt.
Ich habe das Gefühl, das das Programm gar nicht erst ausgeführt wird.
Er gibt mir auch keien Kontrollausgaben aus wenn ich irgentwo println schreibe.
Muss irgentwo anders ran liegen.

Gruß


Markus
 

KSG9|sebastian

Top Contributor
Code:
public void setze_verbindung(String wert) { 
      if (wert == "sql") { 
         this.verbindung = "jdbc:mysql://" +  this.host+ "/" + this.datenbankname; 
      } 
   }

Strings vergleicht man mit equals ("sql".equals(wert)). Dadurch wirft er mit Sicherheit eine Exception beim erzeugen der Verbindung. Und dadurch wird dein Statement (state) nicht initialisiert sondern bleibt null.
 

KSG9|sebastian

Top Contributor
Oh, auserdem wird nie eine Verbindung erzeugt.Irgendwo muss noch die Methode Datenbank#verbindung aufgerufen werden.
Dann noch die Methode so ändern.
Code:
protected void verbindung(){ 
      try { 
         Class.forName(this.nehme_treiber()); 
      } catch (ClassNotFoundException e) { 
         // TODO Automatisch erstellter Catch-Block 
         e.printStackTrace(); 
      } 
      try { 
         con=DriverManager.getConnection(this.nehme_verbindung(),this.getUser(),this.getPassword()); 
         state = con.createStatement();
      } catch (SQLException e) { 
         // TODO Automatisch erstellter Catch-Block 
         e.printStackTrace(); 
      } 
   }
 

KSG9|sebastian

Top Contributor
Die Methode verbindungsaufbau ändern:

Code:
public void verbindungsaufbau(){ 
      this.setHost("localhost"); 
      this.setUser("root"); 
      this.setPassword("12345"); 
      this.setDatenbankname("java"); 
      this.setze_verbindung("sql"); 
      this.setze_treiber("sql"); 
      this.verbindung();
   }
 

SamHotte

Top Contributor
Debuggen könnte helfen - Breakpoint in main() auf der ersten Anweisung, dann durchlaufen und sehen, was gemacht wird.
 

alaska94

Aktives Mitglied
Ich habe alles Versucht was ihr bis jetzt geschrieben hat.
Hier nochmal der Aktuelle Sourecode.

Die Datenbankklasse
Code:
import java.sql.*;
import java.util.HashMap;
import java.util.Vector;

public class Datenbank extends Connect {
	
	private Connection con;
	private Statement state;
	private ResultSet result;
	
	//Diese Methode baut eine Verbindung zur Datenbank auf
	protected void verbindung(){
	      try {
	         Class.forName(this.nehme_treiber());
	      } catch (ClassNotFoundException e) {
	         // TODO Automatisch erstellter Catch-Block
	         e.printStackTrace();
	      }
	      try {
	         con=DriverManager.getConnection(this.nehme_verbindung(),this.getUser(),this.getPassword());
	         state = con.createStatement();
	      } catch (SQLException e) {
	         // TODO Automatisch erstellter Catch-Block
	         e.printStackTrace();
	      }
	   }

	
	//Diese Methode wird für Select Statements verwendet
	protected void hole_query(String abfrage){
		try {
			Statement stmt = con.createStatement();
			this.result=stmt.executeQuery(abfrage);
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			//e.printStackTrace();
			System.out.println("Hier ist ein Lesefehler");
			
		}
		
	}
	
	//Diese Methode wird für Insert und Update Statements verwendet
	protected void schreibe_query(String abfrage){
		
		try {
			Statement stmt = con.createStatement();
			stmt.executeUpdate(abfrage);
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			//e.printStackTrace();
			System.out.println("Hier ist ein Fehler");
			}
	}
	
	//Diese Methode schließt die Verbindung zur Datenbank
	protected void schliesseVerbindung(){
		try {
			this.state.close();
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			//e.printStackTrace();
			System.out.println("Hier ist ein schließfehler");
			
		}
		try {
			this.con.close();
		} catch (SQLException e) {
			// TODO Automatisch erstellter Catch-Block
			e.printStackTrace();
		}
		
	}
	
	//Diese Methode wird verwendet, wenn 1 oder mehr Datensätze aus der Tabelle geholt wird
	protected Vector fetchAsVector() {
		Vector results = new Vector();
		try {
			ResultSetMetaData metaData = this.result.getMetaData();
			int anzSpalten = metaData.getColumnCount();
			while (this.result.next()) {
				HashMap row = new HashMap();
				for (int i = 1; i != anzSpalten + 1; i++) {
					Object obj = this.result.getObject(i);
					String name = metaData.getColumnName(i);
					name = name.toUpperCase();
					row.put(name, obj);
				}
				results.add(row);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return results;

	}
	
	//Diese Methode wird verwendet, wenn ein Datenasatz aus der Tabelle geholt wird
	protected HashMap fetchasHash(){
		HashMap resultat=new HashMap();
		ResultSetMetaData metaData;
		try {
			metaData = this.result.getMetaData();
			int anzSpalten = metaData.getColumnCount();
			this.result.first();
			for (int i = 1; i != anzSpalten + 1; i++) {
				Object obj = this.result.getObject(i);
				String name = metaData.getColumnName(i);
				name = name.toUpperCase();
				resultat.put(name, obj);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return resultat;
	}
	
}
KLasse Connect
Code:
public class Connect {
	private String treiber;

	private String verbindung;

	private String host;

	private String user;

	private String password;

	private String datenbankname;

	// Diese Methode setzt die Treiber
	public void setze_treiber(String wert) {
		if (wert == "sql") {
			this.treiber = "com.mysql.jdbc.Driver";
		}
	}

	// Diese Methode sendet die Treiberdaten
	public String nehme_treiber() {
		return (this.treiber);
	}

	public void setze_verbindung(String wert) {
		if (wert == "sql") {
			this.verbindung = "jdbc:mysql://" +  this.host+ "/" + this.datenbankname;
		}
	}

	public String nehme_verbindung() {
		return this.verbindung;
	}

	public String getHost() {
		return this.host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUser() {
		return this.user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getDatenbankname() {
		return this.datenbankname;
	}

	public void setDatenbankname(String datenbankname) {
		this.datenbankname = datenbankname;
	}

}
Das Modul
Code:
import java.util.Vector;
public class LeseModule extends Datenbank{
		
	public void verbindungsaufbau(){
	      this.setHost("localhost");
	      this.setUser("root");
	      this.setPassword("12345");
	      this.setDatenbankname("java");
	      this.setze_verbindung("sql");
	      this.setze_treiber("sql");
	      this.verbindung();
	   }

	
	public void get_Beitraege(){
		
		String abfrage="Select * from test";
		this.hole_query(abfrage);
		Vector vec=this.fetchAsVector();
		for(int i=0;i<vec.size();i++){
			System.out.println(vec.elementAt(1)+"\t");
		}
	}
		
}

Main
Code:
public class Haupt {

	/**
	 * @param args
	 * Author: Markus Mertens
	 */
	public static void main(String[] args) {
		// TODO Automatisch erstellter Methoden-Stub
		LeseModule lesen=new LeseModule();
		lesen.get_Beitraege();
		lesen.schliesseVerbindung();
		
	}

}
 

KSG9|sebastian

Top Contributor
Strings vergleicht man immernoch mit equals, genau wie vor 5 Stunden :D

Code:
public void setze_treiber(String wert) { 
      if ("sql".equals(wert)) { 
         this.treiber = "com.mysql.jdbc.Driver"; 
      } 
   } 
}
Ansonsten, wie gesagt: Breakpoint in Main und dann step-by-step debuggen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Cast-Fehler: Spring Data exists.... boolean??? Datenbankprogrammierung 1
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
S @OneToMany @JoinTable failed to lazily initialize a collection Fehler Datenbankprogrammierung 2
C Oracle Fehler beim list.add() Datenbankprogrammierung 5
das_leon MySQL Fehler bei der Zeitzone Datenbankprogrammierung 7
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
DaCrazyJavaExpert Derby/JavaDB Unfindbarer Fehler im Datenbank-Code Datenbankprogrammierung 87
L SQL Fehler (Table/View does not exist) Datenbankprogrammierung 17
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
Thallius MySQL Wo ist der Fehler in dem Query? Datenbankprogrammierung 2
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
W Jackcess Fehler Datenbankprogrammierung 1
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
serjoscha MySQL Eine Instanz von eigenem DBWrapper -> Fehler durch mehrfachbenutzung möglich? Datenbankprogrammierung 2
M Wo ist mein Fehler ? o: Datenbankprogrammierung 4
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
T JDBC Fehler Datenbankprogrammierung 2
Neumi5694 Java + MS Access + 64 Bit = Fehler -1073740777 Datenbankprogrammierung 2
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
R Fehler 2601 trotz SQL-UPDATE ? Datenbankprogrammierung 2
B JDBC Connection Fehler Datenbankprogrammierung 8
J Fehler bei mySQL Query Datenbankprogrammierung 19
D Oracle PLSQL Block Fehler Datenbankprogrammierung 11
P SQL-Statement Bei meinem Statement ist ein Fehler? Datenbankprogrammierung 2
S Fehler mit JdbcRowSet Datenbankprogrammierung 2
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
M PL/SQL Fehler "Kein Wert zurückgegeben" Datenbankprogrammierung 4
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
Crashbreaker MySQL MySQL - Hibernate gibt Fehler aus Datenbankprogrammierung 25
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
I Derby/JavaDB Update Fehler Datenbankprogrammierung 4
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
N Oracle Fehler Ungültiges Zeichen Datenbankprogrammierung 2
jgh Zeichensatz-Fehler Datenbankprogrammierung 10
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
F hsqldb Fehler - unknown source Datenbankprogrammierung 11
E Fehler- Komme nicht auf Datenbank Datenbankprogrammierung 13
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
trash JDBC Einbinden Fehler Datenbankprogrammierung 9
B Fehler in Stored Procedure Datenbankprogrammierung 7
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
E Nach Server wechsel Datenbank fehler ?!? Datenbankprogrammierung 3
H Fehler bei null-Datum in MySQL-DB Datenbankprogrammierung 2
B SQL - Ich kann die Fehler nicht finden Datenbankprogrammierung 3
K DB2 Insert mit Subselect Fehler Datenbankprogrammierung 2
M Update mysql Fehler ?? Datenbankprogrammierung 4
T Fehler im SQL ... Datenbankprogrammierung 8
J Fehler bei Hibernate Configuration Datenbankprogrammierung 9
N group by fehler Datenbankprogrammierung 4
P SQL Fehler helft mir bitte Datenbankprogrammierung 12
F Fehler bei Stored Function Datenbankprogrammierung 2
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
C Wo ist der Fehler? Datenbankprogrammierung 5
H Fehler mit ". Microsoft Access Driver" Datenbankprogrammierung 12
K Fehler bei Rückgabewerten Datenbankprogrammierung 3
M Statemend Fehler Datenbankprogrammierung 11
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
E Seltsamer Fehler Datenbankprogrammierung 10
T Fehler bei Verbindungsaufbau zu MySql DB Datenbankprogrammierung 4
S Fehler bei DB Verbindung Access Datenbankprogrammierung 6
A JDBC-Fehler "Objekt bereits geschlossen" Datenbankprogrammierung 4
O SQL-Query bringt Fehler Datenbankprogrammierung 4
B MySql DELETE Anweisung gibt Fehler zurück Datenbankprogrammierung 7
A Fehler beim Starten des Servers für H2 Database Datenbankprogrammierung 13
A Fehler in der HSQLDB Datenbankprogrammierung 6
B fehler bei select befehl Datenbankprogrammierung 5
G SQL fehler -> woran liegt das? Datenbankprogrammierung 3
M Odbc und Fehler Datenbankprogrammierung 44
M Fehler bei der Verbindung zu einer MSSQL/Express Datenbank! Datenbankprogrammierung 17
D mySQL emullierte PreparedStatements haben Fehler unter Last Datenbankprogrammierung 3
F Fehler in Suns FilteredRowSet Implementierung? Datenbankprogrammierung 11
R Fehler in der Eingabe? Datenbankprogrammierung 3
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E JDBC Oracle Fehler, zugriff auf datenbank (Cluster) Datenbankprogrammierung 5
P Fehler: result-set zeigt auf null, aber warum Datenbankprogrammierung 4
G Fehler in der select-Abfrage Datenbankprogrammierung 3
G Fehler beim Verbinden Datenbankprogrammierung 4
D Primary-Key -> Fehler: "Unique constraint violation& Datenbankprogrammierung 12
E Fehler in der SQL-Anweisung Datenbankprogrammierung 11
M insert befehl funzt nicht!wo ist der fehler? Datenbankprogrammierung 5
N Fehler beim matchen von Strings via Query Datenbankprogrammierung 2
L komischer Fehler von ResultSet. Datenbankprogrammierung 2
R Fehler in Datenbankanbindung Servlet -> Access Datenbankprogrammierung 5
E Fehler bei String-Insert in MySQL-DB Datenbankprogrammierung 8
G Wo ist hier der Fehler (createStatement) Datenbankprogrammierung 2
M executeBatch() - Inserts trotz Fehler weitermachen Datenbankprogrammierung 5
W Fehler bei Insert Anweisung obwohl getestet Datenbankprogrammierung 3
J Fehler beim PreparedStatement Datenbankprogrammierung 2
H Java/Access - Fehler bei der Parameterübergbe Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben