![](/img/trans.png)
[英]What is the difference between function declaration Vs. definition in JavaScript?
[英]Difference when using last_insert_row() in Javascript function vs. in DB Query Tool?
我已經在Google Gears(Sqlite)中創建了一個表:
db.execute('create table if not exists SPALINKS (link_id int PRIMARY KEY, sid1 int, sid2 int, label text, user text, Timestamp int');
當使用Google Gears數據庫查詢工具(在FF中)時,帶有'last-insert-rowid'的INSERT可以正常工作。 只要不使用'last-insert-rowid',就可以使用Javascript進行插入。 但是,當使用“ last-insert-rowid”時,它不再起作用:
var sql_stmt = 'INSERT INTO SPALINKS (link_id, sid1, sid2, label, user, Timestamp) VALUES (last_insert_rowid(),?,?,?,?,?)';
var arg_array = [sid1, sid2, label, user, creation_time];
db.execute(sql_stmt, arg_array);
Error: Database operation failed. ERROR: constraint failed DETAILS: constraint failed
為什么SQLite的“ last-insert-rowid”可以與DB Tool一起使用,但不能在從Javascript函數內部創建和執行的SQL語句中使用呢?
似乎問題在於相應的列未定義為AUTOINCREMENT。
我認為您在那種情況下不必使用last_insert_rowid()
。 為什么只使INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
。
// if you writing for android and you have something like this:
//document.addEventListener("deviceready", onDeviceReady, false);
//function onDeviceReady(){
// make sure you comment it if you debugging in browser
// connection to the databse
var db = window.openDatabase("demo.db", "1.0", "Demo Database", 200000);
// There is problem with SQLite recognize new Date() format so I include http://code.google.com/p/datejs/ library in my project and format the date to be recognizable by SQLite
function nowTime(){
return new Date().toString("yyyy-MM-dd HH:mm:ss");
}
function errorCallBack(err) {
alert("Error processing SQL: " + err.code);
}
function callBack(){
function readTransactionError(err){
alert('Read Transaction Error: ' + err);
}
// you can make your vars global if you want to use them out side of function!!!
function querySuccess(tx, results) {
var len = results.rows.length;
for(var i = 0; i < len; i++) {
var sid1Var = results.rows.item(i).sid1;
var sid2Var = results.rows.item(i).sid2;
var labelVar = results.rows.item(i).label;
var userNameVar = results.rows.item(i).userName;
var timeStampVar = results.rows.item(i).timeStamp;
}
}
tx.readTransaction('select * from SPALINKS;', [], querySuccess, readTransactionError);
}
function functionName(sid1, sid2, label, userName) {
db.transaction(function(tx) {
db.executeSql('create table if not exists SPALINKS (link_id int INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, sid1, sid2, label, userName, timeStamp');
db.executeSql('insert into SPALINKS (sid1, sid2, label, userName, timeStamp) VALUES (?, ?, ?, ?, ?)', [sid1, sid2, label, userName, nowTime()], callBack, errorCallBack);
});
}
// assuming you use jQuery
$('#selectorID').click(function(){
functionName(sid1, sid2, label, userName);
});
您可以在類似UPDATE
情況下使用last_insert_rowid()
:
function updateFunction() {
db.transaction(function(tx) {
tx.executeSql('update SPALINKS set timeStamp = "' + nowTime() + '" WHERE link_id = last_insert_rowid()');
});
}
我希望這會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.