我试图将比赛得分存储在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
答案 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语句。