2011-07-29 11 views
0

私はSQLを初めて使っていますが、jQuery $(document).readyステートメントでjavascriptを使用してhtml5 sqlストレージにデータベースを設定しようとしています。私はChromeとFirefoxでテストしていますが、Firefoxはまったく動作しません。私がChromeで持っている問題は、静的な値であればデフォルト値を設定できますが、試してみると物事はうまくいきません、私は実際には毎回その関数を呼びたいときに、このコードは一度だけデフォルトの関数を呼び出すと思います。しかし、私がしようとすると、ErrorDB関数が呼び出されます。 はここのコードです:私はそれ私が間違ったデータ型だけでなく、いくつか他のものを持っていたことである問題の解決、のようなものを発見したjavascriptの関数を使用するsqlカラムのデフォルト値

$(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')));"); 

あなたは技術的には、時間がSQLのための規格であるGMTになることを意味し、それを残し、「localtimeの」を必要としません。しかし、私はまだ一般的にどのようにユーザー定義関数をデフォルト値にするかをまだ分かりませんが、これはまだ私の主な質問です。

+0

公開アプリケーションですか? – hsz

答えて

0

私は間違っていると思います。

  1. 私は、JSのDateオブジェクトがSQLクエリ(... "' + defaultLastModified() + "' ...)に収まらないと確信しています。
  2. defaultLastModified()nowを返すので、2週間でレコードを追加すると、まだレコードを追加する2週間前にはnowが残っています。
  3. (SQLでは)デフォルトでデフォルト値が設定されています(実際にはnow、常に自動的に入力されます)。
+0

1.私はそれが日付であるか単なる文字列であるかわからないが、このコードは日付のように見えるものをデータベースに埋め込むだろう。 2.あなたも正しいこのコードは私が望むように動作するとは思わない。 3.私が知る限り、自動的に呼び出されるデフォルトのDate値はありません。私がLastModifiedフィールドを空白にしたようなものを探してみました。 お返事ありがとうございます。 – nadirku

0

私の理解では、executeSqlはWebKitベースのブラウザでのみサポートされているため、FirefoxやIEでは動作しません。ブラウザ側のデータベースに書き込む別の方法を探してみることをお勧めします。

WebKitブラウザ(Chrome、Safari)の場合、セミコロンを使用してSQL文を閉じることをお勧めします。

tx.executeSql( ' "+ defaultLastModified()+'" NOTは(ID int型主キー、のにNoteText、LastModifiedの日付NOT NULL DEFAULT NOTESを存在する場合のCREATE TABLE ');');

関連する問題