【发布时间】:2014-11-30 11:37:37
【问题描述】:
在第一种方法中,我创建数据库,如果不存在:
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.`
我需要这方面的帮助。谢谢。 (我不使用提交,我尝试使用它也给了我错误)
【问题讨论】:
-
您确定在每个执行语句之后您都关闭了连接吗?另外请检查其他进程(PID)是否正在使用该线程
-
我关闭所有更新,是的,我没听懂你说的第二件事
-
查看link
标签: java sqlite database-locking