SQLite NullPointerException in preparedStatement.close();

ve987

Aktives Mitglied
Hallo,

beim Aufruf der insertInitialValues(); Methode, bekomme ich eine NullPointerException in preparedStatement.close();

Kann mir bitte dabei jemand helfen?

Anbei mein Code:

MAIN KLASSE:

Java:
public class MainClass {

    public static void main(String[] args) {
    
        
        Connection connection = new dbConnection().getConnection();
        
        if (connection != null) {
            System.out.println("verbunden");
        }

        dbStatement dbStatement= new dbStatement();
        
//        try {
//            dbStatement.createTable();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    
      
          
        try {
         
            dbStatement.insertInitialValues();
        } catch (Exception e) {
        e.printStackTrace();
        }
        
        
    }

}

getConnection KLASSE:

Java:
public class dbConnection { 
    
    private static final String DB_Name= "usersTest.db";
    private static final String PATH = "C:\\Users\\xxxxx\\Desktop\\Java\\src\\";
    private static final String CONNECTION_STRING ="jdbc:sqlite:" + PATH + DB_Name; 
    
    
    public static Connection getConnection() {
        
        
        Connection connection = null;

        try {
            connection = DriverManager.getConnection(CONNECTION_STRING);
        } catch (SQLException e) {
        
            e.printStackTrace();
        }
            
        return connection;
                      
    }

}


"Hauptklasse"

Java:
public class dbStatement {
    

    private final String COLUMN_ID = "id";
    private final String COLUMN_CATEGORY = "category";
    private final String COLUMN_PRICE = "price";

    private final String TABLE_NAME = "expenses";

    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    
public void createTable() throws SQLException { 
        
        String createTable = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + 
        "(" + 
                COLUMN_ID + " INTEGER PRIMARY KEY, " +    
                COLUMN_CATEGORY + " TEXT, " +
                COLUMN_PRICE + " REAL "
                
                +")";
                

        executeQuery(createTable);
                
    }
    
    public void executeQuery(String query) throws SQLException {
        
        try {
            connection = dbConnection.getConnection(); 
            preparedStatement = connection.prepareStatement(query); 
            
            if (preparedStatement != null) {
                preparedStatement.execute(); 
            }
            
        } finally {
            preparedStatement.close(); 
            connection.close(); 
            
        }
    }
    
    public void insertInitialValues() throws SQLException {
        
        String insertInitialValues= "INSERT INTO " + TABLE_NAME +
                "(COLUMN_CATEGORY, COLUMN_PRICE)"
                + "VALUES (?, ?)";
        
        try {
            connection= dbConnection.getConnection(); 
            preparedStatement= connection.prepareStatement(insertInitialValues);
            
             preparedStatement.setString(1, "test");
            preparedStatement.setDouble(2, 3.3);
            
            
            
            
            if (preparedStatement != null) {
                 preparedStatement.executeUpdate();
            }
            
        } finally {
        
                preparedStatement.close();
                connection.close();
            
            
            
        }
    }

}
 

Barista

Top Contributor
Offensichtlich ist das PreparedStatement null.

Ein if drum herum wird helfen.
Java:
if (preparedStatement != null) {
    preparedStatement.close();
}
Aber sicher gibt es noch einen Grund, warum das PreparedStatement null ist, dieser Fehler wird durch die NullPointerException verdeckt.
 

ve987

Aktives Mitglied
Danke Barista. Ich habe es ergänzt. Und jetzt kommt der nächste Fehler:

[SQLITE_ERROR] SQL error or missing database (table expenses has no column named COLUMN_CATEGORY)

in:

preparedStatement= connection.prepareStatement(insertInitialValues);

Die Tabelle wurde aber erfolgreich erstellt...
 
K

kneitzel

Gast
Du hast ja auch die Variablennamen in den SQL Befehl geschrieben und nicht den Inhalt der Variablen.
 

ve987

Aktives Mitglied
Problem gelöst :) ich habe eine neue Tabelle erstellt und wurde alles übernommen.


Java:
public void createTable() throws SQLException {
        
        String createTable = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME +
        "(" +
           COLUMN_ID + " INTEGER PRIMARY KEY, " +   
           COLUMN_CATEGORY + " TEXT, " +
           COLUMN_PRICE + " TEXT "
                
                +")";
                
        try {
            connection = dbConnection.getConnection();
            preparedStatement = connection.prepareStatement(createTable);
            
            if (preparedStatement != null) {
                preparedStatement.execute();
            }
            
        } finally {
            if (preparedStatement != null) {
                preparedStatement.close();
            }
            
            connection.close();
            
        }

    }


Java:
    public void insertInitialValues() throws SQLException {
        
        
        String insertInitialValues= "INSERT INTO " +  TABLE_NAME 
            +  " VALUES (?,?,?)" ;
        
        try {
            connection= dbConnection.getConnection();
            preparedStatement= connection.prepareStatement(insertInitialValues);
            
            if (preparedStatement != null) {
                System.out.println("verknüpft");
            }
            

            preparedStatement.setString(2, "test");
            preparedStatement.setString(3, "test");
            
            
            
            if (preparedStatement != null) {
                 preparedStatement.executeUpdate();
            }
            
        } finally {
        
            if (preparedStatement != null) {
                preparedStatement.close();
            }
                
                connection.close();
            
        }
    }
 
K

kneitzel

Gast
Also nur um es noch einmal im Detail zu erläutern, da ich das Gefühl habe, dass die Ursache nicht verstanden wurde.
Java:
        String insertInitialValues= "INSERT INTO " + TABLE_NAME +
                "(COLUMN_CATEGORY, COLUMN_PRICE)"
                + "VALUES (?, ?)";

Hier hast Du also als Spalten die Namen angegeben: COLUMN_CATEGORY und COLUMN_PRICE. Die Spalten heissen aber anders und das sind nur die Namen der Konstanten.

Damit Du den Inhalt der Konstanten nimmst, musst Du das so machen wie auch bei dem create table Statement: Den String beenden und dann mit + die Variable anhängen und dann mit + weiter machen (als eine Möglichkeit). Das wäre dann gewesen:
Java:
        String insertInitialValues= "INSERT INTO " + TABLE_NAME +
                "(" + COLUMN_CATEGORY + ", " + COLUMN_PRICE + ") "
                + "VALUES (?, ?)";

Die Spaltennamen weglassen geht prinzipiell auch, aber wenn dann bei der Datenbank die Reihenfolge der Spalten sich ändert oder so, dann hast Du ein Problem. Das ist ein Grund, wieso ich oft SELECT * und so auch vermeide.
 

ve987

Aktives Mitglied
Vielen lieben Dank für die ausführliche Erklärung! Jetzt verstehe ich das und werde auf jeden Fall berücksichtigen in Zukunft
 

ve987

Aktives Mitglied
Möglicherweise ist das in Java sogar erlaubt; ich finde es aber sehr verwirrend, wenn eine Variable genauso heißt wie eine Klasse.
Du solltest dich an die Konvention halten, dass Klassennamen mit einem Großbuchstaben beginnen und Variablennamen mit einem Kleinbuchstaben beginnen.
Stimmt, du hast völlig recht, das habe ich übersehen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C NullPointerException auf 1nem Rechner von 2 Datenbankprogrammierung 19
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
D Oracle NullPointerException bei select mit Null Values Datenbankprogrammierung 5
D NullPointerException bei DB Verbindung Datenbankprogrammierung 6
T NullPointerException bei Verbindung zur Datenbank Datenbankprogrammierung 4
T NullpointerException Datenbankprogrammierung 10
B ResultSet wirft komische NullPointerException. Datenbankprogrammierung 3
J Derby/JavaDB NullPointerException bei VORHANDENEM EntityManager-Objekt!!! Datenbankprogrammierung 3
Q java.lang.NullPointerException connection = null Datenbankprogrammierung 13
T NullPointerException ( EclipseLink mit OSGi) Datenbankprogrammierung 10
T JPA: NullPointerException nach persist Datenbankprogrammierung 3
A NullPointerException bei DB-Abfrage Datenbankprogrammierung 2
S Jar-Ausführung / RMI / Datenbank / NullPointerException Datenbankprogrammierung 30
S nullpointerexception bei HSQLDB Datenbankprogrammierung 4
T NullPointerException bei leeren Feldern Datenbankprogrammierung 10
R NUllPointerException bei Datenbankabfrage Datenbankprogrammierung 4
S Hsqldb java.lang.NullPointerException Datenbankprogrammierung 2
A NullPointerException trotz getConnection Datenbankprogrammierung 6
H java.lang.NullPointerException Datenbankprogrammierung 7
P Probleme mit NullPointerException Datenbankprogrammierung 5
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
Neumi5694 SQL-Statement Preparedstatement - try resource vs. Garbage Collector Datenbankprogrammierung 5
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
S CSV Datein in DB übernehmen:PreparedStatement bzw executeBatch() zu langsam Datenbankprogrammierung 11
P MySQL PreparedStatement vs. StoredProcedure vs. executeBatch Datenbankprogrammierung 1
P PreparedStatement IN-Funktion Datenbankprogrammierung 8
R PreparedStatement ohne Parameter? Datenbankprogrammierung 4
turmaline Oracle [PreparedStatement] Klammer fehlt Datenbankprogrammierung 9
C PreparedStatement und null Datenbankprogrammierung 13
J Problem bei Boolean in PreparedStatement Datenbankprogrammierung 5
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
D MySQL PreparedStatement mit c3p0 schlägt fehl. Warum? Datenbankprogrammierung 3
S Oracle Problem mit PreparedStatement.setString(1,"str") Datenbankprogrammierung 10
M MySQL preparedStatement und Anführungszeichen Datenbankprogrammierung 6
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G PreparedStatement und Transaktionen Datenbankprogrammierung 2
N Leeres Blob in ein PreparedStatement eintragen Datenbankprogrammierung 2
P PreparedStatement batch und getGeneratedKeys Datenbankprogrammierung 7
T MySQL PreparedStatement mit INSERTs langsam, Batch-Statement auch Datenbankprogrammierung 4
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
Guybrush Threepwood PreparedStatement: execute() oder executeUpdate() Datenbankprogrammierung 3
R PreparedStatement mit verschiedenen Datenbanken Datenbankprogrammierung 2
R Frage zu PreparedStatement/ResultSet Datenbankprogrammierung 16
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
W preparedStatement (MySQL - JDBC) Datenbankprogrammierung 5
Landei PreparedStatement Parameter mehrfach verwenden Datenbankprogrammierung 18
S Create Table mit PreparedStatement Datenbankprogrammierung 2
S Select mit PreparedStatement Datenbankprogrammierung 2
S PreparedStatement setArray(int i, java.sql.Array) Datenbankprogrammierung 17
M Preparedstatement SQL-string auslesen Datenbankprogrammierung 13
T PreparedStatement anzeigen Datenbankprogrammierung 10
A PreparedStatement im Servlet - Referenz speichern Datenbankprogrammierung 3
P PreparedStatement - Angabe des PK Datenbankprogrammierung 4
J Fehler beim PreparedStatement Datenbankprogrammierung 2
B PreparedStatement - anzahl ParameterValues Datenbankprogrammierung 6
J PreparedStatement Datenbankprogrammierung 5
C PreparedStatement Datenbankprogrammierung 2
R DB2 PreparedStatement Batches ungültige Reihenfolge Datenbankprogrammierung 4
P Frage zu Connection.close() Datenbankprogrammierung 4
B MySQL Verwendung von rs.close() und stmt.close() Datenbankprogrammierung 2
S Ressourcenverbrauch Connection Open/Close Datenbankprogrammierung 11
S Probleme mit statement.close() Datenbankprogrammierung 10
C Resultset nach connection close weiterreichen Datenbankprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben