2013-02-18 158 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>