2016-06-03 8 views
1

übergibt Ich versuche, eine SQLite für mein Spiel zu erstellen, und es funktioniert gut, bis ich versuche, einige Variablen in der Tabelle HighScores zu setzen. Wenn ich versuche, eine Variable zu setzen, funktioniert es nur, wenn ich "NOT NULL" lösche.Wie man Variablen in SQLite in Java

public void SQLite(){ 
    Connection c = null; 
    Statement stmt = null; 
    try { 
     Class.forName("org.sqlite.JDBC"); 
     c = DriverManager.getConnection("jdbc:sqlite:test.db"); 

     stmt = c.createStatement(); 
     String sql = "CREATE TABLE HighScores " + 
       "(ID INT PRIMARY KEY  NOT NULL," + 
       " POINTS   INT  NOT NULL, " + 
       " NAME   CHAR(50) NOT NULL, " + 
       " TIME   INT  NOT NULL, " + 
       " LEVEL   INT  NOT NULL)"; 
     stmt.executeUpdate(sql); 


     c.setAutoCommit(false); 
     System.out.println("Opened database successfully"); 

     stmt = c.createStatement(); 
     String sql2 = "INSERT INTO HIGHSCORES (ID,POINTS,NAME,TIME,LEVEL) " + 
       "VALUES (1, ?, 'rodrigo', 99, 1);"; 
     PreparedStatement ps = c.prepareStatement(sql2); 
     ps.setInt(1, 5); 

     stmt.executeUpdate(sql2); 

     stmt.close(); 
     c.commit(); 
     c.close(); 

    } catch (Exception e) { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
} 

Geöffnete Datenbank erfolgreich. java.sql.SQLException: NOT NULL fehlgeschlagen: HighScores.POINTS

Antwort

2

Du executeUpdate auf stmt statt der vorbereiteten Anweisung aufgerufen wird. Da sql2 keinen Wert für POINTS hat, wird versucht, null als Ausnahme einzufügen.

Wechsel:

stmt.executeUpdate(sql2); 

zu

ps.executeUpdate(); 
Verwandte Themen