【问题标题】:java.sql.SQLException: sqlite3_step failure: cannot rollback - no transaction is activejava.sql.SQLException:sqlite3_step 失败:无法回滚 - 没有事务处于活动状态
【发布时间】:2018-02-13 23:50:54
【问题描述】:

我在 Ionic 中有非常简单的代码。我只是从 ionicframwork 文档中复制代码。它目前不工作。我无法发出选择或插入请求。这是我的代码:

this.sqlite.create({
            name: 'sub.db',
            location: 'default'
        })
            .then((db:SQLiteObject) => {
                db.executeSql('create table danceMoves(name VARCHAR(32))', {})
                    .then(() => console.log('Executed SQL'))
                    .catch((e) => console.log(e));
            })
            .catch((e) => console.log(e));

昨天一切正常,今天我有一个错误:

09-05 18:48:46.298 20457-20703/io.ionic.starter V/SQLitePlugin: Android db implementation: built-in android.database.sqlite package
09-05 18:48:46.298 20457-20704/io.ionic.starter V/info: Open sqlite db: /data/user/0/io.ionic.starter/databases/sub.db
09-05 18:48:46.428 20457-20457/io.ionic.starter D/SystemWebChromeClient: file:///android_asset/www/plugins/cordova-sqlite-storage/www/SQLitePlugin.js: Line 179 : OPEN database: sub.db - OK
09-05 18:48:46.428 20457-20457/io.ionic.starter I/chromium: [INFO:CONSOLE(179)] "OPEN database: sub.db - OK", source: file:///android_asset/www/plugins/cordova-sqlite-storage/www/SQLitePlugin.js (179)
09-05 18:48:46.448 20457-20457/io.ionic.starter D/SystemWebChromeClient: file:///android_asset/www/cordova.js: Line 1223 : deviceready has not fired after 5 seconds.
09-05 18:48:46.448 20457-20457/io.ionic.starter I/chromium: [INFO:CONSOLE(1223)] "deviceready has not fired after 5 seconds.", source: file:///android_asset/www/cordova.js (1223)
09-05 18:48:46.488 20457-20457/io.ionic.starter D/CordovaWebViewImpl: onPageFinished(file:///android_asset/www/index.html)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err: java.sql.SQLException: sqlite3_step failure: cannot rollback - no transaction is active
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.liteglue.SQLiteGlueConnection$SQLGStatement.step(SQLiteGlueConnection.java:135)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.sqlc.SQLiteConnectorDatabase.executeSQLiteStatement(SQLiteConnectorDatabase.java:214)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.sqlc.SQLiteConnectorDatabase.executeSqlBatch(SQLiteConnectorDatabase.java:114)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.sqlc.SQLitePlugin$DBRunner.run(SQLitePlugin.java:340)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at java.lang.Thread.run(Thread.java:818)
09-05 18:48:46.528 20457-20704/io.ionic.starter V/executeSqlBatch: SQLitePlugin.executeSql[Batch](): Error=sqlite3_step failure: cannot rollback - no transaction is active
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err: java.sql.SQLException: sqlite3_step failure: cannot rollback - no transaction is active
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.liteglue.SQLiteGlueConnection$SQLGStatement.step(SQLiteGlueConnection.java:135)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.sqlc.SQLiteConnectorDatabase.executeSQLiteStatement(SQLiteConnectorDatabase.java:214)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.sqlc.SQLiteConnectorDatabase.executeSqlBatch(SQLiteConnectorDatabase.java:114)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at io.sqlc.SQLitePlugin$DBRunner.run(SQLitePlugin.java:340)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
09-05 18:48:46.528 20457-20704/io.ionic.starter W/System.err:     at java.lang.Thread.run(Thread.java:818)
09-05 18:48:46.528 20457-20704/io.ionic.starter V/executeSqlBatch: SQLitePlugin.executeSql[Batch](): SQL Error code = 1 message = sqlite3_step failure: cannot rollback - no transaction is active
09-05 18:48:46.538 20457-20457/io.ionic.starter D/SystemWebChromeClient: file:///android_asset/www/build/vendor.js: Line 106774 : Ionic Native: deviceready event fired after 4291 ms
09-05 18:48:46.538 20457-20457/io.ionic.starter I/chromium: [INFO:CONSOLE(106774)] "Ionic Native: deviceready event fired after 4291 ms", source: file:///android_asset/www/build/vendor.js (106774)
09-05 18:48:46.538 20457-20703/io.ionic.starter I/App: WARNING: Back Button Default Behavior will be overridden.  The backbutton event will be fired!
09-05 18:48:46.598 20457-20457/io.ionic.starter D/SystemWebChromeClient: file:///android_asset/www/build/main.js: Line 55 : Executed SQL
09-05 18:48:46.598 20457-20457/io.ionic.starter I/chromium: [INFO:CONSOLE(55)] "Executed SQL", source: file:///android_asset/www/build/main.js (55)

【问题讨论】:

    标签: sqlite cordova ionic3


    【解决方案1】:

    我认为最近发生了类似的事情。 添加平台就绪验证后,它对我有用。与此类似:

      constructor(public nav: NavController, public platform: Platform, public sqlite: SQLite ,...) {
         let _this = this; //Not sure if this is needed
        platform.ready().then(() => {
    
          _this.sqlite.create({
             name: 'sub.db',
             location: 'default'
            })
            .then((db:SQLiteObject) => {
                db.executeSql('create table danceMoves(name VARCHAR(32))', {})
                    .then(() => console.log('Executed SQL'))
                    .catch((e) => console.log(e));
            })
            .catch((e) => console.log(e));
        });
      }
    

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      你应该调用 SQLiteObject 对象实例的 close() 方法。

      this.sqlite.create({
                  name: 'sub.db',
                  location: 'default'
              })
                  .then((db:SQLiteObject) => {
                      db.executeSql('create table danceMoves(name VARCHAR(32))',{})
                          .then(() => {
                              console.log('Executed SQL');
                              db.close(); // <---------------
                           })
                          .catch((e) => console.log(e));
                  })
                  .catch((e) => console.log(e));
      

      希望对你有帮助

      https://ionicframework.com/docs/native/sqlite/

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 1970-01-01
        • 2014-07-11
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        相关资源
        最近更新 更多