如何在java中将变量传递给SQLite

时间:2016-06-03 01:31:45

标签: java sql

我正在尝试为我的游戏创建一个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

1 个答案:

答案 0 :(得分:2)

您正在executeUpdate上调用stmt而不是预备语句。由于sql2没有POINTS的任何值,因此它会尝试插入null,因此会出现异常。

更改:

stmt.executeUpdate(sql2);

ps.executeUpdate();