0

我正在爲使用apache cordova工具進行視覺工作室的android應用程序。但我遇到了一個問題,當我在android 5.1.1+ 上執行我的應用程序時,一切都很完美,當我在android 4.4.2上運行它時(無法在較低版本上嘗試)出現問題。在Android 4.4.2中使用SQLite

我創建了一個應用程序來嘗試解決問題。我開始通過創建數據庫:

function openDB() { 
    try { 
     if (!window.openDatabase) { 
      $("#error").text("Not supported"); 
     } else { 
      var shortName = 'TestDataBase20'; 
      var version = '1.0'; 
      var displayName = 'TestDataBase'; 
      var maxSize = 2048; // in bytes 
      db = window.openDatabase(shortName, version, displayName, maxSize); 

     } 
    } catch (e) { 
     // Error handling code goes here. 
     if (e == 2) { 
      // Version number mismatch. 
      $("#error").text("Invalid database version."); 
     } else { 
      $("#error").text("Unknown error " + e + "."); 
     } 
     return; 
    } 


    createTables(); 
} 

然後,我創建了表,並試圖找回我創建的表的名稱:

function createTables() { 
    db.transaction(
     function (transaction) { 

      /* The first query causes the transaction to (intentionally) fail if the table exists. */ 
      transaction.executeSql('CREATE TABLE IF NOT EXISTS settings (id INTEGER PRIMARY KEY AUTOINCREMENT, login TEXT NOT NULL);', [], nullDataHandler, errorHandler); 
      /*Select the name of the table called settings*/ 
      transaction.executeSql('SELECT name FROM sqlite_master WHERE type="table" AND name="settings";', [], initialize, errorHandler); 
     }, 
     /*Executed if there is a problem during the execution of db.transaction*/ 
     function(error){ 
      $("#error").text(function() { 
       var text = $("#error").text() + " createTables : " + error.message; 
       return text; 
      }); 
     } 
    ); 
} 

最後我顯示檢索到的數據:

function initialize(transaction, results) { 

    if (results.rows.length != 0) { 
     $("#result").text(function() { 
      var text = $("#result").text() + " " + results.rows[0].name; 
      return text; 
     }); 
    } else { 
     $("#result").text(function() { 
      var text = $("#result").text() + " No elements in results"; 
      return text; 
     }); 
    } 
} 

當我啓動它在這裏的是Android 4.4.2是錯誤:

createTables : the statement callback raised an exception or statement error callback did not return false 

該錯誤來自無法正確執行的函數createTables中的db.transaction。

我真的不明白爲什麼它可以在Android 5.1.1+上運行,而不是在4.4.2上(我在智能手機和平板電腦上試過)。

+0

我想你還沒有添加db.transaction的成功方法。您只添加了錯誤方法。請嘗試添加成功方法。你可以參考這個鏈接:http://stackoverflow.com/questions/33879785/cordova-sqlite-plugin-not-functioning-with-android-studio/33894275#33894275 – Dhruv

+0

我照你說的做,但它也不工作。 – saroten

+0

你有沒有嘗試上面提到的鏈接?因爲就我而言,它在Android(所有版本)和Cordova的iOS上都非常完美。 – Dhruv

回答

0

我已經通過使用results.rows.item(0).name而不是results.rows[0].name解決了此問題。