我正在尝试为我的游戏创建一个SQLite,它的工作正常,直到我尝试将一些变量放在表HighScores中。 如果我尝试输入变量,只有在删除“NOT NULL”时才有效。
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);
}
}
成功打开数据库。 java.sql.SQLException:NOT NULL约束失败:HighScores.POINTS
答案 0 :(得分:2)
您正在executeUpdate
上调用stmt
而不是预备语句。由于sql2
没有POINTS
的任何值,因此它会尝试插入null,因此会出现异常。
更改:
stmt.executeUpdate(sql2);
到
ps.executeUpdate();