2013-02-18 155 views
1

我使用了一个用于phonegap应用程序的sqlite数据库。具有默认值的SQLite数据库

我尝试这样:

在第一时间应用程序启动创建TABEL:

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")'); 

的表命名的设置有3排likt这样的:

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

是否有人可以帮助我

+2

您的CREATE TABLE语法无效 – mvp 2013-02-18 07:11:08

+0

@mvp有什么问题? – PMe 2013-02-18 08:13:20

+0

@mpears:检查我的更新答案,它现在应该适合你。 – mvp 2013-02-18 08:52:11

回答

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'); 
... 
+0

确实sqlite接受“VARCHAR”?最新的时间我测试它,它不工作,迫使我做它“文字” – 2013-02-18 07:21:13

+0

听起来很奇怪,但SQLite将接受任何类型的东西。它的类型包含“INT”,它会将其视为整数。如果包含'CHAR'或'TEXT',它会将其视为文本。有更多的规则,阅读[这里](http://www.sqlite.org/datatype3。html) – mvp 2013-02-18 07:23:16

+0

问题是我不喜欢覆盖,如果表存在。 – PMe 2013-02-18 07:25:38

0

问题是与创建您的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

0

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

<!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>