javascript中函数的SQL列默认值

sql column default value with functions in javascript

本文关键字:默认值 SQL 函数 javascript      更新时间:2023-09-26

我是SQL新手,但我正试图在jquery $(文档)中使用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的标准。然而,我仍然不知道如何在一般情况下获得用户定义的函数作为默认值,这仍然是我的主要问题。

我认为有三件事是错的。

  1. 我很确定JS日期对象不适合sql查询(... "' + defaultLastModified() + "' ...)。
  2. 如果它适合,它也不会像你想的那样工作:defaultLastModified()将返回now,所以当你在2周内添加记录时,它仍然包含now(所以在添加记录之前2周)。
  3. 没有日期(在SQL中)默认默认值(这将自动填写真正的now,总是)?

我的理解是executeSql只支持基于WebKit的浏览器,因此它不能在Firefox或IE中工作。我建议寻找另一种方法来写入浏览器端数据库。

对于WebKit浏览器(Chrome, Safari),您可能想尝试使用分号来关闭SQL语句。

例子

tx。executeSql('CREATE TABLE IF NOT EXISTS, NOTES(ID int primary key,NoteText, LastModified Date NOT NULL DEFAULT "' + defaultLastModified() + '");');