SQLite Erhalte bei Query INSERT INTO eine NullPointerException

Xearox

Mitglied
Hallo Zusammen =)

Ich versuche nun seit 2 Tagen ein Problem zu lösen, wo ich einfach nicht mehr mit weiter komme. Ich habe schon etliche Möglichkeiten ausprobiert, um das Problem selber zu lösen, doch ich komme einfach nicht weiter. Habe alles einige Male neu geschrieben um evtl. doch irgendwo ein Fehler zu entdecken doch ich schaffe es einfach nicht.

Und zwar möchte ich gerne in einer vorhandenen sqlite Datenbank eine Zeile hinzufügen.

Zuvor frage ich ab, ob der Wert bereits vorhanden ist, falls nicht soll der Wert geschrieben werden.

So sieht meine Funktion aus:
Java:
public static void AddNewPlayer(String PlayerName){
        Connection conn = null;
        PreparedStatement ps = null;
        if(FindPlayer(PlayerName)){
            System.out.println("Player allready in the Database");
        }else{       
        try{
            conn = getSQLConnection();
            ps = conn.prepareStatement("INSERT INTO " + TableName + " (PlayerName, PlayerDeath) VALUES(?,?)");

            ps.setString(1, "'"+PlayerName+"'");
           
            ps.setInt(2, 0);
           
            ps.executeUpdate();
            return;
        } catch (SQLException e){
            System.err.println( e.getClass().getName() + ": " + e.getMessage() );
        } finally {
            try {
                if (ps != null)
                    ps.close();
                if (conn != null)
                    conn.close();
            } catch (SQLException e){
                System.err.println( e.getClass().getName() + ": " + e.getMessage() );
            }
          }
        }
        }

Und die getSQLConnection sieht so aus:
Java:
public static Connection getSQLConnection(){
        //Connection connection = null;
        try{
            if(connection!=null&&connection.isClosed()){
                return connection;
            }
           
            Class.forName("org.sqlite.JDBC");
            connection = DriverManager.getConnection("jdbc:sqlite:"+DBPath+DBName);
            System.out.println("Opened database successfully");
            return connection;
        }catch ( Exception e){
           
        }
        return null;
       
    }

Wenn ich nun die Funktion AddNewPlayer aus meiner main.java raus aufrufe, läuft es bis zu dieser Zeile alles einwandfrei.

Java:
ps = conn.prepareStatement("INSERT INTO " + TableName + " (PlayerName, PlayerDeath) VALUES(?,?)");

Hier bekomme ich nun in der Console eine Exception:
Code:
[02:44:16 WARN]: java.lang.NullPointerException
[02:44:16 WARN]:        at org.sqlite.PrepStmt.<init>(PrepStmt.java:42)
[02:44:16 WARN]:        at org.sqlite.Conn.prepareStatement(Conn.java:404)
[02:44:16 WARN]:        at org.sqlite.Conn.prepareStatement(Conn.java:399)
[02:44:16 WARN]:        at org.sqlite.Conn.prepareStatement(Conn.java:383)
[02:44:16 WARN]:        at de.xearox.tutorial.Database.AddNewPlayer(Database.java:114)

Leider war es das auch schon an Fehler. Zeile 114 ist wie oben geschrieben, die Zeile ps = conn.prepareStatement.

Ich weiß mir leider keinen Rat mehr und komme einfach nicht mehr weiter. Kann mir evtl. hier jemand weiter helfen?

p.s. Nicht über diese Zeilen wundern, wo einfach irgendwas in die Console gepostet wird. Das hab ich dafür gemacht, um zu schauen, bis wohin die Anwendung abgearbeitet wird.


Liebe Grüße
Xearox
 

stg

Top Contributor
Zu dem Zeitpunkt hat dann wohl conn den Wert null.
Da du in deiner Methode getSQLConnection eine Exception fängst, aber einfach unter den Tisch fallen lässt, siehst du aber gar nicht, was da schief läuft. Das solltest du grundsätzlich niemals (!!) machen.. Logge in deinem catch-Block wenigstens die Exception, auch wenn du sie nicht weiter behandeln willst, dann bist du direkt ein Stück weit schlauer :)
 

Xearox

Mitglied
Zu dem Zeitpunkt hat dann wohl conn den Wert null.
Da du in deiner Methode getSQLConnection eine Exception fängst, aber einfach unter den Tisch fallen lässt, siehst du aber gar nicht, was da schief läuft. Das solltest du grundsätzlich niemals (!!) machen.. Logge in deinem catch-Block wenigstens die Exception, auch wenn du sie nicht weiter behandeln willst, dann bist du direkt ein Stück weit schlauer :)

Hi, danke für deine Antwort.

Ist es auch möglich, einmal beim Start des Programms eine Datenbank Verbindung aufzubauen und beim Beenden des Programms wieder zu beenden die Verbindung? Und dann einfach nur connection.prepareStatement immer wieder zu nutzen?
 

Saheeda

Top Contributor
@Xearox

Es ist keine so gute Idee, permanent eine Verbindung zur Datenbank offen zu halten. Ich kenne es so, dass diese für jede Aktion neu geöffnet und direkt danach wieder geschloßen wird.
Bei einer permanenten Verbindung ist das Risiko viel größer, dass sich jemand unerlaubt dazwischen hängen kann.
 

Thallius

Top Contributor
Es macht auch nicht wirklich Sinn die Verbindung permanent offen zu halten. Alle modernen DB Systeme halten eh die Verbindungen vor um sie schnell wieder zur Verfügung zu stellen. Es gibt also keinerlei Performance Verluste wenn man die Verbindung jedesmal wieder anfragt.

Gruß

Claus
 

Xearox

Mitglied
naja, es ging eigentlich viel mehr darum, das wenn ich das so lasse, wie es aktuell ist, die Verbindung sehr oft pro Sekunde aufgebaut wird. Und das hört man an der Festplatte, wenn was im Programm passiert.

Aber ich danke euch erstemal bis hier her. Das mit der Exception hatte ich garnicht gesehn, das ich da eine Ausgabe vergessen habe. Jetzt bin ich was das angeht, schon mal einen Schritt weiter.
 

Thallius

Top Contributor
Wenn jeder Connect bei Dir eine Festplatten-Aktion auslöst, dann stimmt aber irgendwas nicht in deinen Datenbank Einstellungen. Wie gesagt,sollte die DB genug Caches haben um eine Connection bereit zu halten die schon einmal offen war.

Gruß

Claus
 

Xearox

Mitglied
Wenn jeder Connect bei Dir eine Festplatten-Aktion auslöst, dann stimmt aber irgendwas nicht in deinen Datenbank Einstellungen. Wie gesagt,sollte die DB genug Caches haben um eine Connection bereit zu halten die schon einmal offen war.

Gruß

Claus

Hi, danke Claus. Ich habe mich auch ehrlich gesagt gewundert, wieso die Festplatte jedes mal rattert, sobald die DB Verbindung aufgebaut wird, etwas dort rein geschrieben wird und wieder geschlossen wird.

Was die Einstellung der DB angeht, kann ich nichts zu sagen. Habe die DB im Programm erstellt und keinerlei Einstellungen vorgenommen, sofern man überhaupt dort Einstellungen vornehmen kann, SQLite ist Neuland für mich.

Ich hab es nun so gelöst, das beim starten des Programms, eine Verbindung zur DB aufgebaut wird und beim beenden wieder geschlossen wird. Das Sicherheitsrisiko, wie Saheeda beschrieben hat, wird in meinem Fall nicht vorkommen, da das Programm nur Lokal verwendet wird und sich daher das erübrigt, das sich jemand dazwischen hängen kann. Auf jedenfall erhalte ich nun eigentlich gar keine Festplatten Reaktion mehr, so mindestens keine mehr, die ich hören kann.
 

Joose

Top Contributor
SQLite ist auch ein einfaches "Datenbanksystem", welches die Daten in einer Datei speichert ohne großes DrumHerum. Das dabei die Festplatte arbeitet ist dann eigentlich normal.
 

ottens

Aktives Mitglied
Hi
erstens der cach-Block der Funktion getSQLConnection() steht ohne Ausgabe d.h wenn Fehler bzw Exception passiert wird darüber nichts berichtet und bleiben die Fehler unentdeckt.
dazu hast du schon versucht einen String als Parameter bei
ps.setString(1, "'"+PlayerName+"'");
zu speichern ?

z.B
String playerName = "otto";
ps.setString(1, playerName);


sehr wichtig die Nummer der Zeilen sind nicht in der Post enthalten

at org.sqlite.PrepStmt.<init>(PrepStmt.java:42)
[02:44:16 WARN]: at org.sqlite.Conn.prepareStatement(Conn.java:404)
[02:44:16 WARN]: at org.sqlite.Conn.prepareStatement(Conn.java:399)
[02:44:16 WARN]: at org.sqlite.Conn.prepareStatement(Conn.java:383)
[02:44:16 WARN]: at de.xearox.tutorial.Database.AddNewPlayer(Database.java:114)

für uns sind die
Conn.java:404 oder
Conn.java:399 u.s.w

nicht zu erkennen welche Zeilen sind ? wo sie im Code stehen ??

Gruß
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna PostgreSQL-Query in eine MicrosoftSQL-Query konvertieren - chatGPT hilft nur bedingt. Datenbankprogrammierung 3
L JPA EclipseLink PostgreSQL auslesen mit Query Datenbankprogrammierung 2
T TRIM in Query Datenbankprogrammierung 3
D sql query in methode mit rückgabetyp Datenbankprogrammierung 14
OnDemand Mysql Query Builder Datenbankprogrammierung 1
P Herausfinden wann Query null zurück gibt? Datenbankprogrammierung 1
OnDemand SQL Query Optimierung Datenbankprogrammierung 28
Kirby.exe Verwirrung beim Query Datenbankprogrammierung 4
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
M Oracle Query umbauen (sind die Querys gleich?) Datenbankprogrammierung 5
B Frage bei einer SQL Query Datenbankprogrammierung 3
C Fehlerhafte SQL Query Datenbankprogrammierung 4
B MySQL Query (Anfängerfrage :D) Datenbankprogrammierung 3
B JPA / HQL Support bei Query - Distanzberechnung Datenbankprogrammierung 0
D JPQL- Query über mehrere Tabellen Datenbankprogrammierung 7
Thallius MySQL Was ist falsch an dem Query? Datenbankprogrammierung 2
Thallius MySQL Wo ist der Fehler in dem Query? Datenbankprogrammierung 2
OnDemand MySQL SQL Query Datenbankprogrammierung 2
B Leerzeichen nach Umlaut -> Sichtbar erst nach Query! Datenbankprogrammierung 6
S sql query, um bestimten datensatz zu finden Datenbankprogrammierung 33
OnDemand SQL Query Anzahl der Werte Datenbankprogrammierung 8
H MySQL Anderer Query-Ansatz? Datenbankprogrammierung 4
P Tricky SQL Query Datenbankprogrammierung 3
P SQL Query Problem Datenbankprogrammierung 14
I Nullpointer bei einfacher Daba query Datenbankprogrammierung 12
I Query für Geburtstage Datenbankprogrammierung 6
S MYSQL: "Packet for query is too large" Datenbankprogrammierung 0
S HSQLDB PrepareStatement- Falsche query Datenbankprogrammierung 2
F Oracle The parameter name [...] in the query's selection criteria does not match any parameter name d Datenbankprogrammierung 2
J Fehler bei mySQL Query Datenbankprogrammierung 19
R MySQL berechnete Spalte im selben query weiterverwenden? Datenbankprogrammierung 4
S MySQL Hochkommata in Query Datenbankprogrammierung 7
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
T HQL Query funktioniert nicht? Datenbankprogrammierung 8
M PostgreSQL Hibernate Query Restriction Datenbankprogrammierung 2
N Query für Derby DB mit Enterbrise Bean Datenbankprogrammierung 4
algebraiker Eclipse RCP - no persistent classes found for query class Datenbankprogrammierung 4
M List aus Hibernate Query Datenbankprogrammierung 5
M JPA-Query - nicht das komplette Objekt Datenbankprogrammierung 4
M Problem mit Hibernate und Named Query Datenbankprogrammierung 1
S DB2 Eclipselink Query Datenbankprogrammierung 2
LadyMilka Ergebnistyp HQL-Query Datenbankprogrammierung 3
M Frage zu folgender Query in EJB-QL Datenbankprogrammierung 4
Eldorado MySQL HQL Query Tag von Date Datenbankprogrammierung 6
H DB auslesen (Hibernate, Query, Parameter) Datenbankprogrammierung 8
C Split String für SQl query Datenbankprogrammierung 10
C setSelectedValue in SQL Query übergeben Datenbankprogrammierung 20
D Hibernate: Query verarbeiten Datenbankprogrammierung 11
B Hibernate, einfaches Query Ausgeben Datenbankprogrammierung 4
X Select Query auf Substring Datenbankprogrammierung 2
L Query grafisch erzeugen Datenbankprogrammierung 6
N SQL Query Browser Error Datenbankprogrammierung 6
B Suche Query um genau einen Wert einer def. Gruppe aus einer Tabelle zu erhalten. Datenbankprogrammierung 2
Chtonian Effizientes Query System für Wortnachschlagewerk Datenbankprogrammierung 9
D Hibernate, Criteria Query Datenbankprogrammierung 2
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
G JPQL L*KE / JPA Query Language Datenbankprogrammierung 9
O SQL-Query bringt Fehler Datenbankprogrammierung 4
D kurze Frage zu einem Query Datenbankprogrammierung 6
S Query aus Querys Datenbankprogrammierung 14
P [Hibernate] Criterion-Query in HQL übersetzen Datenbankprogrammierung 10
D Neuer Query wird nicht erkannt Datenbankprogrammierung 10
E Wie koennte die SQL Query aussehen? Datenbankprogrammierung 13
B mysql query ausführen Datenbankprogrammierung 4
N Fehler beim matchen von Strings via Query Datenbankprogrammierung 2
G How to put SQL query result into a file Datenbankprogrammierung 3
B Ein Query mit Mysql erzeugen Datenbankprogrammierung 6
G Hilfe bei Query für Spaltenansicht. Datenbankprogrammierung 20
A Fehler bei query Datenbankprogrammierung 7
G SQL-Query Methode Datenbankprogrammierung 4
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
L SQL Datenbank INSERT INTO Datenbankprogrammierung 6
L SQL Datenbank Tabelle insert Datenbankprogrammierung 7
O HOW TO INSERT PRIMARY INTO ANOTHER TABLE AND USE IT AS FOREIGN KEY TO DISPLAY DATA IN A RELATIONSHIP Datenbankprogrammierung 3
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
C Problem with INSERT.............ON DUPLICATE KEY Datenbankprogrammierung 3
A MySQL Select und Insert in Java Datenbankprogrammierung 15
S PostgreSQL Bytea INSERT Datenbankprogrammierung 8
W Problem mit Insert in zwei Tabellen Datenbankprogrammierung 8
L INSERT INTO Befehl in Java Datenbankprogrammierung 8
L SQL-Statement INSERT INTO ON DUPLICATE KEY UPDATE funktioniert nicht Datenbankprogrammierung 5
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
D SQLite INSERT OR REPLACE INTO macht neuen Eintrag?! Datenbankprogrammierung 2
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
A Oracle insert Array in DB Datenbankprogrammierung 7
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
M JAVA Derby INSERT probleme Datenbankprogrammierung 12
Y MySQL Eclipselink Insert JSF Beispiel gesucht Datenbankprogrammierung 2
T MySQL MySQL - Insert into fügt zwei identische Datensätze ein Datenbankprogrammierung 2
M Derby/JavaDB Derby SQL Insert mit AUTO_INCREMENT, welche ID wurde vergeben? Datenbankprogrammierung 6
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
M INSERT-Problem = integrity constraint violation: foreign key no parent Datenbankprogrammierung 5
P MySQL INSERT / UPDATE MySQL - perStoredProcedure oder direkt im Code Datenbankprogrammierung 3
M MySQL Insert über mehrere Tabellen Datenbankprogrammierung 7
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
B MS SQL: Insert LOB Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben