在第一种方法中,我创建数据库(如果不存在):
Class.forName("org.sqlite.JDBC");
Connection connection = null;
connection = DriverManager.getConnection("jdbc:sqlite:" + Gdx.files.internal("mjvsworld.db"));
Statement statement = connection.createStatement();
statement.executeUpdate("CREATE TABLE IF NOT EXISTS GLOBAL(ID INTEGER PRIMARY KEY" +
" AUTOINCREMENT, NAME TEXT, MAXPUNTUATION INTEGER)");
if (statement != null) statement.close();
if (connection != null) connection.close();
在第二种方法中,以其他方式(我也这样做,更改更新查询),我尝试读取表中是否插入了某些行,或者如果现在创建了表,则插入它:
statement.executeUpdate("INSERT OR REPLACE INTO GLOBAL (ID, NAME, MAXPUNTUATION) VALUES "
+"(1, 'Elvis', "+maxpoints+")");
在项目中之后的另一次调用中,我尝试仅更新一行(ID = 1),而**在这一次调用中,给了我错误**:
statement.executeUpdate("UPDATE GLOBAL set MAXPUNTUATION = "+puntos+" AND NAME = '"+name+"' where ID=1;");
´
**错误代码:**
java.sql.SQLException: database is locked
at org.sqlite.NativeDB.throwex(NativeDB.java:210)
at org.sqlite.NativeDB._exec(Native Method)
at org.sqlite.Stmt.executeUpdate(Stmt.java:152)
at pack.util.DbConnection.actualizarMaxPuntuacion(DbConnection.java:94)
at pack.maingame.Platform.finalizarJuego(Platform.java:1060)
at pack.maingame.Platform.configurarDeteccionesJugador1(Platform.java:686)
at pack.maingame.Platform.render(Platform.java:443)
at pack.visual.GameScreen.render(GameScreen.java:51)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:208)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:115)
DbConnection.java:94 `equals to last executeUpdate I post.`
我需要这方面的帮助。谢谢。 (我不使用提交,我尝试使用它并且也给了我错误)
最佳答案
SQLite 过去常常在使用 SQLite 浏览器等任何应用程序打开它时抛出此类错误,并且我们在代码中使用相同的文件。因此,在运行代码之前关闭数据库。
关于java - SQLite - 数据库在 Java 中被锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27212788/