SQLite 是免費資料庫軟體,也可以跨平台(windows/Linux) ,當然手機也內建,但是和NOSQL概念不同喔,仍是關聯式資料庫,不少codova 會結合SQLite做一些APP的應用,以下範例教學剛好有使用到SQLite 也提供大家一些參考
一、建立SQLite 的函式庫 :寫成獨立的核心SQL元件
var db;
var sqlList = {
openDB:function myfunction(dbName) {
db = window.openDatabase("Database", "1.0", dbName, 1000);
return db;
},
executeSQL: function myfunction(db, sqlcommand, returnSuccessHandler) {
//宣告 returnSuccessHandler
函式
db.transaction(selectDBTransactionSuccessHandler,
errorHandler, function () { });
function selectDBTransactionSuccessHandler(sqlTransaction) {
sqlTransaction.executeSql(sqlcommand, [], successHandler,
errorHandler);
};
function successHandler(sqlTransaction, sqlResultSet) {
//呼叫 returnSuccessHandler 函式 回傳結果
returnSuccessHandler(sqlResultSet.rows);
}
function errorHandler(errorCode) {
console.log("executeSQL" + " sql: error");
console.log(errorCode.err);
};
},
executeNonQuery: function executeQuery(db, sqlcommand) {
db.transaction(function (tx) {
tx.executeSql(sqlcommand, [], function () { }, errorHandler);
}, function errorCB(err) {
alert("error");
console.warn("Error processing SQL: " + err.code);
}, function () {
});
function errorHandler(err) {
alert("無法執行sql指令!" +sqlcommand + "錯誤碼" + err.code);
}
},
executeNonQueryWithID: function (db, sqlcommand, id) {
db.transaction(function (tx) {
tx.executeSql(sqlcommand, [id], function () {
});
}, function errorCB(err) {
alert("error");
console.warn("Error processing SQL: " + err.code);
}, function () {
});
}
};
|
executeSQL: function myfunction(db, sqlcommand, returnSuccessHandler):
要將SQLite執行的結果回傳,需要有一個函式負責接收回傳值,所以returnSuccessHandler
是函數名稱,而非變數名稱,透過此函式回傳結果。
二、新增、刪除、修改等操作
新增資料庫
var db =sqlList.openDB("clinicDatabase"); //開啟資料表
|
新增資料表
sqlList.executeNonQuery(db, "CREATE TABLE IF NOT
EXISTS clinics (id INTEGER PRIMARY KEY
AUTOINCREMENT, clinicName TEXT, clinicIP TEXT, user TEXT, password
TEXT)");
|
刪除資料表
sqlList.executeNonQuery(db, "DROP TABLE IF EXISTS
clinics ");
|
新增資料
var sqlValue = "INSERT INTO clinics (clinicName,clinicIP,user,password)
VALUES('" + clinicName + "'," + "'" + clinicIP + "','" + user + "','" + password + "')";
|
刪除資料
sqlList.executeNonQueryWithID(db,
"delete from clinics where id=?", id);
|
執行SQL的查詢語法
var db =sqlList.openDB("clinicDatabase"); //開啟資料表
sqlList.executeSQL(db, "select *
from clinics", function (readData) {
//查詢的資料回傳值…
$("#settingPage_clinicName").val(readData.item(0).clinicName);
$("#settingPage_clinicIP").val(readData.item(0).clinicIP);
$("#settingPage_user").val(readData.item(0).user);
$("#settingPage_password").val(readData.item(0).password);
});
|
將SQLite的執行SQL的共同函式變成物件,程式是不是變得簡潔許多呢? 因為在codova
呼叫sqlLite 會以非同步結果回應傳回值,所以要在function
() {} 內才能接受回覆的值,希望這對大家有所幫助~ 感謝各位蒞臨。
沒有留言:
張貼留言