【问题标题】:SQLite Database with default value具有默认值的 SQLite 数据库
【发布时间】:2013-02-02 13:45:53
【问题描述】:

我将 sqlite 数据库用于 phonegap 应用程序。

我尝试这样的事情:

在应用第一次启动时创建表格:

tx.executeSql('CREATE TABLE IF NOT EXISTS SETTINGS (id unique,data)');

之后我会得到第一行项目:

var returnwert = results.rows.item(0).data;

该代码将产生以下错误:

Item index is out of range!

我知道为什么,因为它在表格中没有默认值。

如何创建具有 dafult 值的表?

类似的东西:

 tx.executeSql('CREATE TABLE IF NOT EXISTS SETTINGS (id unique 1, 2, 3,data defaultvalue="test")');

一个名为 SETTINGS 的 3 行表如下所示:

id = 0 data = test
id = 1 data = test
id = 2 data = test

谁能帮帮我

【问题讨论】:

  • 您的CREATE TABLE 语法无效
  • @mpears:检查我更新的答案,它现在应该适合你了。

标签: javascript sql sqlite cordova


【解决方案1】:

创建表的意思可能是这样的:

CREATE TABLE IF NOT EXISTS settings (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    data VARCHAR(128)
)

要使用一些值填充表,请使用以下语句:

REPLACE INTO settings VALUES (1, 'test');
REPLACE INTO settings VALUES (2, 'test');
REPLACE INTO settings VALUES (3, 'test');

如果您是第一次运行,则会创建 id 为 1、2、3 的行。

如果你第二次运行它,id 1,2,3 的行将被覆盖。

如果您不想覆盖,请像这样使用INSERT OR IGNORE

INSERT OR IGNORE INTO settings VALUES (1, 'test');
...

【讨论】:

  • sqlite 接受 "VARCHAR" 吗?我最近一次测试它,它没有用强迫我把它变成“TEXT”
  • 听起来很奇怪,但 SQLite 可以接受任何类型的内容。它类型包含INT,它会将其视为整数。如果包含CHARTEXT,它会将其视为文本。还有更多规则,阅读here
  • 问题是如果表存在我不想覆盖。
  • 1.第一次在手机上启动应用程序...创建表设置默认值... 2. 为表设置新值 3. 第二次启动应用程序时,不应覆盖新值(在步骤 2 中设置)!
  • 你在真机上测试过吗?
【解决方案2】:

问题在于您的 sqlite 表的创建。

  tx.executeSql('CREATE TABLE "SETTINGS" ("id" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT    NULL , "DATA" TEXT NOT NULL);',
                  null,
                  function(){/* to do on success */},
                  function(){/* to do on fail */}
);

然后在插入时你应该使用这个查询:

tx.executeSql("INSERT INTO \"book\" VALUES(1,'test');",null,function(){/* to do on success */},function(){/* to do on fail */});
tx.executeSql("INSERT INTO \"book\" VALUES(2,'test');",null,function(){/* to do on success */},function(){/* to do on fail */});
tx.executeSql("INSERT INTO \"book\" VALUES(3,'test');",null,function(){/* to do on success */},function(){/* to do on fail */});

您可以随时参考phonegap documentary

【讨论】:

    【解决方案3】:

    请尝试以下代码打开一个新数据库,插入并从中读取值。

    <!DOCTYPE html>
    <html>
      <head>
        <title>Storage Example</title>
    
        <script type="text/javascript" charset="utf-8" src="cordova-2.4.0.js"></script>
        <script type="text/javascript" charset="utf-8">
    
        // Wait for Cordova to load
        //
        document.addEventListener("deviceready", onDeviceReady, false);
    
        // Populate the database 
        //
        function populateDB(tx) {
            tx.executeSql('DROP TABLE IF EXISTS DEMO');
            tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
            tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
            tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
        }
    
        // Query the database
        //
        function queryDB(tx) {
            tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB);
        }
    
        // Query the success callback
        //
        function querySuccess(tx, results) {
      console.log("Returned rows = " + results.rows.length);
      // this will be true since it was a select statement and so rowsAffected was 0
      if (!results.rowsAffected) {
        console.log('No rows affected!');
        return false;
      }
      // for an insert statement, this property will return the ID of the last inserted row
      console.log("Last inserted row ID = " + results.insertId);
        }
    
        // Transaction error callback
        //
        function errorCB(err) {
            console.log("Error processing SQL: "+err.code);
        }
    
        // Transaction success callback
        //
        function successCB() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(queryDB, errorCB);
        }
    
        // Cordova is ready
        //
        function onDeviceReady() {
            var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
            db.transaction(populateDB, errorCB, successCB);
        }
    
        </script>
      </head>
      <body>
        <h1>Example</h1>
        <p>Database</p>
      </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2013-08-19
      • 2019-02-15
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      相关资源
      最近更新 更多