2013-01-12 90 views
0

我有我的sqlite的以下代碼存儲從相機的名稱和圖像。我從Eclipse控制檯知道我正在獲取名稱和映像路徑。 console.log(addRecord)獲取名稱和圖像路徑,但我在事務行和queryDB函數上得到了「無法執行未定義的消息」消息,所以我想我的insert語句出錯了。此外,數據類型文本是否適用於imageURI?任何幫助讚賞。Sqlite插入語句沒有運行

function onDeviceReady() { 
    var db = window.openDatabase("database", "1.0", "Profiles", 5000); 
    if(db) { 
console.log('The device is ready'); 
db.transaction(populateDB, errorCB, successCB, insertRecord); // only do stuff if db exists 
} 
else{ 
console.log('There is a problem'); 
} 
    function populateDB(tx) { 
    tx.executeSql('DROP TABLE IF EXISTS USERS');//get rid of this once working? 
    tx.executeSql('CREATE TABLE IF NOT EXISTS USERS (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, username VARCHAR NOT NULL, imagePath TEXT)'); 
    console.log('The table USERS is created'); 
    } 
    //Insert the details 
function insertRecord(tx) { 
     userName = document.getElementById('userName').value; 
     imagePath; 
     var addRecord = 'INSERT INTO USERS (username, imagePath) VALUES ("' + userName + '","' + imagePath + '")'; 
     console.log(addRecord); 
     tx.executeSql(addRecord, [userName, imagePath], queryDB, errorCB); 
} 

// Query the database 
function queryDB(tx) { 
     var getUsers = "SELECT * FROM USERS ORDER BY id ASC', [], querySuccess, errorCB"; 
     db.transaction(function (tx) { 
     tx.executeSql(getUsers, [], querySuccess, queryFailure); 
    }, errorCB, successCB); 
} 

// Query the success callback 

function querySuccess(tx, results) { 
     console.log("You are in the querysuccess function"); 
} 

// Transaction error callback 

function errorCB(err) { 
     console.log("Error processing SQL: " + err.code); 
} 

function queryFailure(err) { 
     console.log("Error processing SQL: " + err.code); 
} 
// Transaction success callback 

function successCB() { 
     console.log('The db and table are working'); 
} 
+2

你不顯示調用'insertRecord'的代碼。 – DCoder

+0

我已經包括,現在(我想!)。 – Inkers

+0

這不是交易的工作方式。傳遞給'transaction'的第一個回調函數在完成事務提交後(或者已經回滾了一個錯誤)後,必須執行所有的工作。在代碼中調用insertRecord沒有辦法,你可以從別處調用它(可能來自表單提交中的事件處理程序)並且不傳遞事務。 – DCoder

回答

1

標識符queryFailure未定義。添加功能:

function queryFailure(tx, results) { 
    console.log("You are in the queryFailure function"); 
} 

一旦你得到它的運行,你會看到queryFailure函數被調用,因爲你在查詢時出現錯誤。這:

var getUsers = "SELECT * FROM USERS ORDER BY id ASC', [], querySuccess, errorCB"; 

應該是:

var getUsers = "SELECT * FROM USERS ORDER BY id ASC"; 
+0

謝謝,當我需要處理那部分時,它會很有用。 – Inkers