我是SQL的新手,但我正在尝试使用jquery $(document).ready语句中的javascript在html5 sql存储中建立数据库。我一直在测试Chrome和firefox,但firefox根本不起作用,我在chrome中遇到的问题是我可以设置一个默认值,如果它是一个静态值,但当我尝试使用一个函数,事情并没有那么好,我认为这个代码只调用默认函数一次,实际上我希望它每次调用函数。但是,当我尝试这样做时,会调用ErrorDB函数。 这是代码:
$(document).ready(function()
{
var db;
try{if(window.openDatabase){
db =openDatabase("fetchnotes", "1.0","fetchnotesDB",1000000);
if (!db) {alert("failed to load database on disk"); return;};
}
else{
alert("could not open database.");
return;
}
}catch(err){alert("error "+err); return;}
db.transaction(initializeDB, errorDB);
});
function initializeDB(tx){
tx.executeSql('Drop TABLE IF EXISTS NOTES');
tx.executeSql('CREATE TABLE IF NOT EXISTS'+
' NOTES(ID int primary key,NoteText, LastModified Date NOT NULL DEFAULT "'
+defaultLastModified()+ '")');
tx.executeSql('INSERT INTO NOTES (ID, NoteText) VALUES (1, "make a better database") ');
}
function errorDB(tx,err)
{
alert("error "+err);
}
function defaultLastModified()
{
var result= new Date();
return result;
}
好的,我找到了解决这个问题的方法,那就是我有一个不正确的数据类型以及其他一些东西。修正后的代码在这里:
tx.executeSql("CREATE TABLE IF NOT EXISTS"+
" NOTES(ID INTEGER PRIMARY KEY,NoteText TEXT ," +
"LastModified TIMESTAMP DEFAULT (datetime('now','localtime')));");
从技术上讲,你不需要'localtime',把它留下意味着时间将是GMT,这是SQL的标准。但是,我仍然不知道如何将用户定义的函数作为默认值,这仍然是我的主要问题。
答案 0 :(得分:0)
我认为有三件事是错误的。
... "' + defaultLastModified() + "' ...
)。defaultLastModified()
将返回now
,因此当您在2周内添加记录时,它仍将包含{{1} (所以在添加记录前2周)。now
)?答案 1 :(得分:0)
我的理解是只在基于WebKit的浏览器上支持executeSql,因此它在Firefox或IE中不起作用。我建议寻找另一种写入浏览器端数据库的方法。
对于WebKit浏览器(Chrome,Safari),您可能希望尝试使用分号来关闭SQL语句。
实施例
tx.executeSql('CREATE TABLE IF NOT NOT EXISTS NOTES(ID int primary key,NoteText,LastModified Date NOT NULL DEFAULT“'defaultLastModified()+'”);');