1

最初の方法では、存在しない場合はデータベースを作成します。

        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();

2番目の方法では、別の方法で(同じことを行い、更新クエリを変更します)、テーブル内の行が挿入されたかどうかを読み取ろうとします.If table was created now, insert it:

statement.executeUpdate("INSERT OR REPLACE INTO GLOBAL (ID, NAME, MAXPUNTUATION) VALUES "
                +"(1, 'Elvis', "+maxpoints+")");

別の呼び出しで、プロジェクトの後で、1 つの行 (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.`

これについて助けが必要です。ありがとう。(私はコミットを使用しません。使用しようとしましたが、エラーも発生します)

4

1 に答える 1

0

SQLite は、SQLite ブラウザーなどのアプリを使用して既に開いているときに、このようなエラーをスローしていました。コードで同じファイルを使用しています。そのため、コードを実行する前にデータベースを閉じてください。

于 2014-11-30T12:27:52.150 に答える