java.lang.NullPointerException connection = null

qtuan3008

Mitglied
Hallo ihr lieben,

Ich habe ein Problem...
es gibt Fehler, ich weiß nicht warum, könnte jemand mir helfen.

Java:
java.lang.NullPointerException
	at Parser.insertValue(Parser.java:136)
	at Parser.endElement(Parser.java:248)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at javax.xml.parsers.SAXParser.parse(Unknown Source)
	at gui.makeDB(gui.java:87)
	at Main.main(Main.java:7)

und mein verkruze code

Java:
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

import java.sql.*;
import java.io.*;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class gui extends DefaultHandler {

	Connection connection;// Die Datenbankverbindung
	Statement statement; // Ein SQL-Statement-Objekt
	PreparedStatement prestatement;
	String driver = "org.postgresql.Driver";
	// --------------------------------------------------------------------------

	String host = "localhost"; // !!! anpassen !!!

	String port = "5432"; // !!! anpassen !!!

	String database = "xml"; // !!! anpassen !!!

	String user = "postgres"; // !!! anpassen !!!

	String password = "eleno308"; // !!! anpassen !!!

	// --------------------------------------------------------------------------
	// jdbc:postgresql:database
	// jdbc:postgresql://host/database
	// jdbc:postgresql://host:port/database

	public String getUrl() {
		return ("jdbc:postgresql:"
				+ (host != null ? ("//" + host)
						+ (port != null ? ":" + port : "") + "/" : "") + database);
	}

	public void loadJdbcDriver() {
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("driver loaded");
	}

	public void openConnection() {
		try {
			connection = DriverManager.getConnection(getUrl(), user, password);
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("connection opened");
	}

	public void closeConnection() {
		try {
			connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("\nconnection closed");
	}

	public void makeDB() throws Exception {
		loadJdbcDriver();
		openConnection();
		creatTable();

		closeConnection();
	}

	/* Implementierung JDBC */
	public void creatTable() {
		try {
			statement = connection.createStatement();
			statement.execute("DROP TABLE IF EXISTS page");
			statement.execute("CREATE TABLE page " + "(title VARCHAR(255), "
					+ " id VARCHAR(255), " + " PRIMARY KEY ( id ))");
			statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("\nCreating table");
	}

	public void insertValue(String title, String id) {
		String abfr;
		try {
			prestatement = connection
					.prepareStatement("INSERT INTO page " + "VALUES (?,?)");
			prestatement.setString(1, title);
			prestatement.setString(2, id);
			prestatement.executeUpdate();
			
			statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("\nInsert Value");
	}
}

ich habe die Stelle gefunden warum Fehlermeldung gibt. und zwar
[JAVA=42]prestatement = connection
.prepareStatement("INSERT INTO page " + "VALUES (?,?)");[/code]
ich habe
Java:
System.out.println("connection:" + connection);
und die gibt connection: null aus.
Ich habe nicht verstanden warum, weil die Stelle
Java:
public void openConnection() {
		try {
			connection = DriverManager.getConnection(getUrl(), user, password);
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("connection opened");
	}
("connection:" + connection);
muss connection schon installiert werden. Und ganz oben habe ich connection Global definiert.
 

Antoras

Top Contributor
Und von wo wird
Code:
openConnection
und
Code:
insertValue
aufgerufen?
 

qtuan3008

Mitglied
Und von wo wird
Code:
openConnection
und
Code:
insertValue
aufgerufen?

Code:
openConnection
wird in
Code:
makeDB
aufgeruft.
Code:
insertValue
wird in ein
Java:
public void endElement(String uri, String localName, String rawName)
			throws SAXException {
		if (rawName.equals("title")) {
			inTitle = false;
		}
		if (rawName.equals("id")) {
			inId = false;
		}
		if (rawName.equals("revision")) {
			inRevision = false;
		}
		if (rawName.equals("page")) {
			
			ausString();
			insertValue(stringTitle, intId);
		}
	}
aufgeruft.
Ich möchte eine XML datei einlesen, die Information rausholen und dann in eine Datebank speichert
Code:
insertValue
 

Antoras

Top Contributor
In
Code:
makeDB
wird aber auch
Code:
closeConnection
aufgerufen.
 

qtuan3008

Mitglied
In
Code:
makeDB
wird aber auch
Code:
closeConnection
aufgerufen.

in
Code:
makeDB
wird zuerst
Code:
loadJdbcDriver();
, dann
Code:
openConnection
hier wird
Code:
connection
installiert, danach wird die
Code:
Parser.parse(Bz2file, handler);
aufgeruft ---->
Code:
endElement
------>
Code:
insertValue
und zulerst ist
Code:
closeConnection
 

Antoras

Top Contributor
Das mit dem Parser steht aber nirgendwo in deinem geposteten Code. Zeig mal den vollständigen Code in dem man die Aufrufreihenfolge erkennen kann oder guck den Code gleich mit einem Debugger durch.

Die Bedeutung von KSKB erfährst du wenn du mit der Maus drüber fährst.
 

qtuan3008

Mitglied
hier ist mein code

Java:
import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
import org.xml.sax.*;
import org.xml.sax.helpers.*;

import java.sql.*;
import java.io.*;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class gui extends DefaultHandler {

	Connection connection;// Die Datenbankverbindung
	Statement statement; // Ein SQL-Statement-Objekt
	String driver = "org.postgresql.Driver";
	// --------------------------------------------------------------------------

	String host = "localhost"; // !!! anpassen !!!

	String port = "5432"; // !!! anpassen !!!

	String database = "xml"; // !!! anpassen !!!

	String user = "postgres"; // !!! anpassen !!!

	String password = "eleno308"; // !!! anpassen !!!

	// --------------------------------------------------------------------------
	// jdbc:postgresql:database
	// jdbc:postgresql://host/database
	// jdbc:postgresql://host:port/database

	String stringTitle = "";
	String intId;
	private boolean inTitle = false;
	private boolean inId = false;
	private boolean inRevision = false;

	public String getUrl() {
		return ("jdbc:postgresql:"
				+ (host != null ? ("//" + host)
						+ (port != null ? ":" + port : "") + "/" : "") + database);
	}

	public void loadJdbcDriver() {
		try {
			Class.forName(driver);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("driver loaded");
	}

	public void openConnection() {
		try {
			connection = DriverManager.getConnection(getUrl(), user, password);
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("connection opened");
	}

	public void closeConnection() {
		try {
			connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("\nconnection closed");
	}

	public void makeDB() throws Exception {
		loadJdbcDriver();
		openConnection();
		creatTable();
		
		InputStream file = new FileInputStream("FileTuTao.xml.bz2");
		InputStream Bz2file = new BZip2CompressorInputStream(file);
		SAXParserFactory parserFactory = SAXParserFactory.newInstance();
		SAXParser Parser = parserFactory.newSAXParser();
		gui handler = new gui();
		Parser.parse(Bz2file, handler);

		closeConnection();
	}

	/* Implementierung JDBC */

	public void creatTable() {
		try {
			statement = connection.createStatement();
			statement.execute("DROP TABLE IF EXISTS page");
			statement.execute("CREATE TABLE page " + "(title VARCHAR(255), "
					+ " id VARCHAR(255), " + " PRIMARY KEY ( id ))");
			statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("\nCreating table");
	}

	public void insertValue(String title, String id) {
		try {

			PreparedStatement statement = connection
					.prepareStatement("INSERT INTO page " + "VALUES (?,?)");
			statement.setString(1, title);
			statement.setString(2, id);
			statement.executeUpdate();

			statement.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
		System.out.println("\nInsert Value");
	}

	public void startElement(String namespaceURI, String localName,
			String rawName, Attributes attrs) throws SAXException {
		if (rawName.equals("title")) {
			inTitle = true;
		}
		if (rawName.equals("id")) {
			inId = true;
		}
		if (rawName.equals("revision")) {
			inRevision = true;
		}
	}

	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (inTitle)
			stringTitle = new String(ch, start, length);
		if (inId && !inRevision)
			intId = new String(ch, start, length);
	}

	public void endElement(String uri, String localName, String rawName)
			throws SAXException {
		if (rawName.equals("title")) {
			inTitle = false;
		}
		if (rawName.equals("id")) {
			inId = false;
		}
		if (rawName.equals("revision")) {
			inRevision = false;
		}
		if (rawName.equals("page")) {
			insertValue(stringTitle, intId);
		}
	}

	public void ausString() {
		System.out.println(stringTitle + "  xxx: xxxx  " + intId);
	}

	public void setDocumentLocator(Locator locator) {
	}

	private void Message(String mode, SAXParseException exception) {
		System.out.println(mode + " Line: " + exception.getLineNumber()
				+ " URI: " + exception.getSystemId() + "\n" + " Message: "
				+ exception.getMessage());
	}

	public void warning(SAXParseException exception) throws SAXException {

		Message("**Parsing Warning**\n", exception);
		throw new SAXException("Warning encountered");
	}

	public void error(SAXParseException exception) throws SAXException {

		Message("**Parsing Error**\n", exception);
		throw new SAXException("Error encountered");
	}

	public void fatalError(SAXParseException exception) throws SAXException {

		Message("**Parsing Fatal Error**\n", exception);
		throw new SAXException("Fatal Error encountered");
	}
}
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Da haben wir doch schon das Problem:
Java:
        gui handler = new gui();
        Parser.parse(Bz2file, handler);
Du erzeugst ein neues Objekt, das eine uninitialisierte Connection beinhaltet und übergibst dieses Objekt an deinen Parser, anstatt das momentane Objekt zu übergeben. Fürs erste dürfte es reichen die beiden Zeilen durch
Code:
Parser.parse(Bz2file, this);
zu ersetzen.
 

XHelp

Top Contributor
Du erstellst ja auch eine neue gui-Instanz (übrigens werden Klasse in UpperCamelCase geschrieben). übergib einfach
Code:
this
als handler
 

qtuan3008

Mitglied
Da haben wir doch schon das Problem:
Java:
        gui handler = new gui();
        Parser.parse(Bz2file, handler);
Du erzeugst ein neues Objekt, das eine uninitialisierte Connection beinhaltet und übergibst dieses Objekt an deinen Parser, anstatt das momentane Objekt zu übergeben. Fürs erste dürfte es reichen die beiden Zeilen durch
Code:
Parser.parse(Bz2file, this);
zu ersetzen.
stimmt, Vielen Dank an Antoras und XHelp!!!. Ich werde versuchen zu korrigieren.
 

qtuan3008

Mitglied
Du erstellst ja auch eine neue gui-Instanz (übrigens werden Klasse in UpperCamelCase geschrieben). übergib einfach
Code:
this
als handler

Ich habe gerade probiert mit
Code:
this
. Hat gut geklappt. Danke für deinen Tipp. Eigentlich sollte ich keine neue Objecten erzeugen, die brauchen viel Arbeitspeicher, passt nicht zu meiner Project.
Ich wünsche euch einen schönen Rest Samstag.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
S Hsqldb java.lang.NullPointerException Datenbankprogrammierung 2
H java.lang.NullPointerException Datenbankprogrammierung 7
D SQL Server Android App: 'int java.lang.String.length()' on a null object reference Datenbankprogrammierung 15
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
G java.lang.ClassNotFoundException: org.hsqldb.jdbcDriver Datenbankprogrammierung 4
D Derby/JavaDB java.lang.ClassFormatError: Duplicate field name&signature Datenbankprogrammierung 3
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
T Hsqldb: java.lang.NoClassDefFoundError: org/hsqldb/Server Datenbankprogrammierung 2
S java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Datenbankprogrammierung 10
ARadauer java.lang.UnsatisfiedLinkError: blob_read Datenbankprogrammierung 4
J brauche HILFE: java.lang.NoSuchMethodError: calculateSecurityWarningPosition Datenbankprogrammierung 2
A Exception in thread "AWT-EventQueue-0" java.lang.N Datenbankprogrammierung 4
zilti java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Datenbankprogrammierung 3
D java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Datenbankprogrammierung 5
B java.lang.Class.forName0(Native Method) Datenbankprogrammierung 3
S Reflection java.lang.IllegalArgumentException Datenbankprogrammierung 3
märliprinz Exception in thread "main" java.lang.OutOfMemoryEr Datenbankprogrammierung 9
G java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserv Datenbankprogrammierung 7
P JDBC will nicht - java.lang.noClassDefException (o.ä.) Datenbankprogrammierung 7
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
P Reicht finally nicht um DB connections zu schließen in (altem) Java? Datenbankprogrammierung 4
A Java DB Server lässt sich nicht starten Datenbankprogrammierung 3
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
U SQL Server mit Java verbinden Datenbankprogrammierung 5
D SQLite Datenbank in Android Studio (Java) durchsuchen Datenbankprogrammierung 3
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Das printen der Ausgabe des Oracle-SQL-Statements in der Java-Eclipse-Konsole funktioniert nicht Datenbankprogrammierung 6
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
Zrebna Noobfrage: Konvertierung von SQL-Datentyp 'timestamp with time zone' in Java-Datentyp Datenbankprogrammierung 3
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
berserkerdq2 Was kann passieren, wenn ich in java einstelle, dass der Fremdschüssel ein Attribut ist, welches selber kein Primärschlüssel ist? Datenbankprogrammierung 4
berserkerdq2 Foreign key einstellen java Datenbankprogrammierung 4
nikgo Java SQL Ausgabe in Liste o.ä. abspeichern um mit dem Ergbnis "zu arbeiten"? Datenbankprogrammierung 5
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
S ODBC Treiber in Java Editor einbinden Datenbankprogrammierung 3
H Oracle Resize eines Images in Java und Rückgabe des Image als BLOB an die Oracle Datebank Datenbankprogrammierung 14
H Java Class zum komprimieren von Jpeg-Images zum Einbinden in Oracle DB - Bild als blob (in und out) Datenbankprogrammierung 23
V SQLite java.sql.SQLException: no such column: Datenbankprogrammierung 18
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
Slaylen Java List Suchen mit eigenem Generischen Datentyp Datenbankprogrammierung 10
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
H MySQL Verbindung Datenbank und Eclipse (Java) Datenbankprogrammierung 5
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
N java SQL JAR - Probleme Datenbankprogrammierung 18
N SQL Datenbank Spalte in Java Array Datenbankprogrammierung 2
N SQL-Statement Java Variable in SQL DB einfügen Datenbankprogrammierung 1
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
T Java Spiel Daten speichern Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
L Mybatis Datenbankabfragen in Java Datenbankprogrammierung 1
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
S Datenbank MySQL und Java Datenbankprogrammierung 8
S Beispiel-Blockchain + GUI mit Java erstellen Datenbankprogrammierung 0
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
Trèfle SQLite SQL-Java Änderungen ausgeben Datenbankprogrammierung 1
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
A MySQL Select und Insert in Java Datenbankprogrammierung 15
C Derby/JavaDB Auf Variable aus Link in java server page zugreifen Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
F MySQL Einfügen von Datensätzen über Java Datenbankprogrammierung 8
B CSV in Java einbinden und Rechnung Datenbankprogrammierung 7
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
L Java- Zähle alle Werte aus der Tabelle von aktiver Zelle Datenbankprogrammierung 12
S Datenbank/Java true/false Datenbankprogrammierung 8
S Java und SQL-Befehle Datenbankprogrammierung 6
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L Datenbankprogrammierung mit Java und phpMyAdmin Datenbankprogrammierung 4
Korvinus Java mit Cassandra verbinden Datenbankprogrammierung 18
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
D Installation von MariaDB in java und eclipse Datenbankprogrammierung 2
H Datenbank Export mit Java Datenbankprogrammierung 3
I MariaDB-Verbindung in JAVA Datenbankprogrammierung 11
L Oracle Datenbank über Java aufrufen Datenbankprogrammierung 29
W Daten in Java intern abfragen Datenbankprogrammierung 1
W MySQL Ausgabe von Datenbank in Java-App Datenbankprogrammierung 6
D Java Datenbanken Datenbankprogrammierung 1
Y H2 H2 foreign key in Spark Java ausgeben Datenbankprogrammierung 1
J Java Eclipse Hilfe beim Programmieren Datenbankprogrammierung 7
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
C Mit asm laufende Java Anwendung manipulieren Datenbankprogrammierung 1
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
K Java Datenbank auslesen Datenbankprogrammierung 8
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K HSQLDB .sql Script Aufruf über Java Datenbankprogrammierung 7
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
B MySQL bplaced Datenbank mit Java ansprechen Datenbankprogrammierung 11
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben