检查SQLlite IOS中的数据库是否存在并删除数据库

3

我目前正在使用PhoneGap创建iOS应用程序。

在熟悉SQL JavaScript交互过程中,我似乎已经创建了10个相同名称的数据库文件。

我目前正在使用以下创建代码(来自PhoneGap Wiki):

var mydb=false;
// initialise the database
initDB = function() {
  try { 
    if (!window.openDatabase) { 
      alert('not supported'); 
    } else { 
      var shortName = 'phonegap'; 
      var version = '1.0'; 
      var displayName = 'PhoneGap Test Database'; 
      var maxSize = 65536; // in bytes 
      mydb = openDatabase(shortName, version, displayName, maxSize); 
     }
  } catch(e) { 
    // Error handling code goes here. 
    if (e == INVALID_STATE_ERR) { 
      // Version number mismatch. 
      alert("Invalid database version."); 
    } else { 
      alert("Unknown error "+e+"."); 
    } 
    return; 
  } 
}
// db error handler - prevents the rest of the transaction going ahead on failure
    errorHandler = function (transaction, error) { 
      // returns true to rollback the transaction
    return true;  
          } 
// null db data handler
    nullDataHandler = function (transaction, results) { } 

我的问题是,我不确定在创建数据库之前如何检查它是否存在,或者如何仅在每个设备上创建一次数据库?
其次,如何删除所有已创建的这些数据库。
transaction.executeSql('DROP DATABASE phonegap;'); 

似乎没有删除任何内容。

谢谢。


http://www.devdaily.com/android/sqlite-drop-database-how - Mayur Birari
2个回答

4

请尝试以下代码。它不会创建多个数据库文件,只需通过访问以下位置进行交叉验证 -

/ Users / {username} / Library / Application Support / iPhone模拟器 / 4.3 / Applications / {3D5CD3CC-C35B-41B3-BF99-F1E4B048FFFF} / Library / WebKit / Databases / file__0  
这是一个sqlite3示例,涵盖了在表上创建,插入,删除和删除查询。
<!DOCTYPE html>
<html>
  <body style="font: 75% Lucida Grande, Trebuchet MS">
    <div id="content"></div>
    <p id="log" style="color: gray"></p>
    <script>
      document.getElementById('content').innerHTML = 
        '<h4>Simple to do list</h4>'+
        '<ul id="results"></ul><div>Handle Database in Phonegap</div>'+
        '<button onclick="newRecord()">new record</button>'+
        '<button onclick="createTable()">create table</button>' +
        '<button onclick="dropTable()">drop table</button>';
      var db;
      var log = document.getElementById('log');
      db = openDatabase("DBTest", "1.0", "HTML5 Database API example", 200000);
      showRecords();
      document.getElementById('results').addEventListener('click', function(e) { e.preventDefault(); }, false);
      function onError(tx, error) {
        log.innerHTML += '<p>' + error.message + '</p>';
      }
      // select all records and display them
      function showRecords() {
        document.getElementById('results').innerHTML = '';
        db.transaction(function(tx) {
          tx.executeSql("SELECT * FROM Table1Test", [], function(tx, result) {
            for (var i = 0, item = null; i < result.rows.length; i++) {
              item = result.rows.item(i);
              document.getElementById('results').innerHTML += 
                  '<li><span contenteditable="true" onkeyup="updateRecord('+item['id']+', this)">'+
                  item['id']+' '+item['text'] + '</span> <a href="#" onclick="deleteRecord('+item['id']+')">x</a></li>';
            }
          });
        });
      }
      function createTable() {
        db.transaction(function(tx) {
          tx.executeSql("CREATE TABLE Table1Test (id REAL UNIQUE, text TEXT)", [],
              function(tx) { log.innerHTML = 'Table1Test created' },
              onError);
        });
      }
      // add record with random values
      function newRecord() {
        var num = Math.round(Math.random() * 10000); // random data
        db.transaction(function(tx) {
          tx.executeSql("INSERT INTO Table1Test (id, text) VALUES (?, ?)", [num, 'Record:'],
              function(tx, result) {
                log.innerHTML = 'record added';
                showRecords();
              }, 
              onError);
        });
      }
      function updateRecord(id, textEl) {
        db.transaction(function(tx) {
          tx.executeSql("UPDATE Table1Test SET text = ? WHERE id = ?", [textEl.innerHTML, id], null, onError);
        });
      }
      function deleteRecord(id) {
        db.transaction(function(tx) {
          tx.executeSql("DELETE FROM Table1Test WHERE id=?", [id],
              function(tx, result) { showRecords() }, 
              onError);
        });
      }
      // delete table from db
      function dropTable() {
        db.transaction(function(tx) {
          tx.executeSql("DROP TABLE Table1Test", [],
              function(tx) { showRecords() }, 
              onError);
        });
      }
     </script>
  </body>
</html> 

关于删除数据库... 对于像SQLite这样的嵌入式数据库引擎来说,似乎没有意义。
要创建一个新的数据库,只需执行sqlite_open()。
要删除数据库,只需删除文件即可。
谢谢, Mayur

感谢您提供的代码示例,比我看到的其他示例易读得多。关于多个数据库的问题,这正是我在Safari开发控制台中看到的。我正在使用实际设备而不是模拟器,不知道如何进入设备文件系统以确认。 - Xand94
那么你如何知道是否创建了多个数据库? - Mayur Birari
在Safari中使用Web检查器每次刷新页面都会显示一个新的数据库树。 - Xand94

0

我手动从Library中删除了SQLite数据库,这对我很有帮助。感谢您宝贵的提示。


请问使用哪个库? - Sandi Laufenberg-Deku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接