将游戏得分存储到sqlite数据库Java中

时间:2019-05-21 20:25:52

标签: java sqlite

我试图将比赛得分存储在SQLite数据库中。我在DB Browser中创建了一个表SCORE和一个HIGHSCORE字段。在Game类中,游戏结束后我调用以下方法

private void Add(int highScore) {
    try {
        Class.forName("org.sqlite.JDBC");
        c = DriverManager.getConnection("jdbc:sqlite:score.db");
        c.setAutoCommit(false);
        stmt = c.createStatement();
        String sql = " INSERT INTO SCORE (HIGHSCORE) " +
                "VALUES (highScore);"+highScore;
        stmt.executeUpdate(sql);
        stmt.close();
        c.close();
    } catch (Exception e) {
        System.err.println(e.getClass().getName() + ": " + e.getMessage());
        System.exit(0);
    }
    System.out.println("Score registred");
}

这是错误:java.sql.SQLException:没有这样的列:highScore

2 个答案:

答案 0 :(得分:0)

 String sql = " INSERT INTO SCORE (HIGHSCORE) " +
              "VALUES (highScore);"+highScore;

这是错误的,因为它正在创建wierdo查询:

  

插入分数(高分)值(高分); 7328

以7328为您的得分示例。查询应为:

 String sql = " INSERT INTO SCORE (HIGHSCORE) " +
              "VALUES ("+highScore+");";

请注意将变量的字符串值连接到String sql变量中的语法。现在,该字符串应变为:

  

插入分数(高分数)值(7328);

答案 1 :(得分:0)

您没有正确传递参数。
更改为此:

    Class.forName("org.sqlite.JDBC");
    c = DriverManager.getConnection("jdbc:sqlite:score.db");
    c.setAutoCommit(false);
    String sql = "INSERT INTO SCORE (HIGHSCORE) VALUES (?);";
    PreparedStatement stmt = c.prepareStatement(sql);
    stmt.setInt(1, highScore);
    stmt.executeUpdate(sql);
    stmt.close();
    c.close();

通过这种方式将参数highScore传递到sql语句。