sql列默认值与javascript中的函数

时间:2011-07-29 08:59:21

标签: javascript sql html5 default-value

我是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的标准。但是,我仍然不知道如何将用户定义的函数作为默认值,这仍然是我的主要问题。

2 个答案:

答案 0 :(得分:0)

我认为有三件事是错误的。

  1. 我很确定JS Date-object不适合SQL查询(... "' + defaultLastModified() + "' ...)。
  2. 如果它适合,它将无法正常工作:defaultLastModified()将返回now,因此当您在2周内添加记录时,它仍将包含{{1} (所以在添加记录前2周)。
  3. 默认情况下,没有日期(在SQL中)有一个默认值(它会自动填写真实的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()+'”);');