Значение по умолчанию столбца SQL с функциями в JavaScript - PullRequest
0 голосов
/ 29 июля 2011

Я новичок в SQL, но я пытаюсь настроить базу данных в хранилище html5 sql, используя javascript в операторе jquery $ (document) .ready.Я тестировал в 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 голосов
/ 29 июля 2011

Насколько я понимаю, executeSql поддерживается только в браузерах на основе WebKit, поэтому он не будет работать в Firefox или IE.Я бы предложил поискать другой способ записи в базу данных на стороне браузера.

Для браузеров WebKit (Chrome, Safari) вы можете попробовать использовать точку с запятой для закрытия оператора SQL.

Пример

tx.executeSql ('CREATE TABLE ЕСЛИ НЕ СУЩЕСТВУЕТ ЗАМЕТКИ (ID первичного ключа, NoteText, LastModified Date NOT NULL DEFAULT "' + defaultLastModified () + '"); ');

0 голосов
/ 29 июля 2011

Есть 3 вещи, которые я считаю неправильными.

  1. Я почти уверен, что объект даты JS не поместится в SQL-запрос (... "' + defaultLastModified() + "' ...).
  2. Если он подходит, он не будет работать так, как вы думаете: defaultLastModified() вернет now, поэтому, когда вы добавите запись через 2 недели, она все равно будет содержать now (так за 2 недели додобавление записи).
  3. У дат (в SQL) по умолчанию нет значения по умолчанию (которое автоматически заполнит реальное now, всегда)?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...