2013-10-29 129 views
1

我試圖插入數據到SQLite數據庫,包括日期列。但是,當我在下面的代碼中執行查詢LastLogin字段永遠不會填充。此外,Created字段也保留爲空,即使默認值爲CURRENT_TIMESTAMP。查詢中的所有其他字段都正確填充。誰能告訴我爲什麼這是?無法將Date()值插入到SQLite數據庫

這是SQLite的表SQL:

CREATE TABLE [User] (
    [Id] INTEGER PRIMARY KEY NOT NULL, 
    [CredentialsToken] TEXT NULL, 
    [GivenName] TEXT NULL, 
    [FamilyName] TEXT NULL, 
    [Created] DATE DEFAULT CURRENT_TIMESTAMP NULL, 
    [LastUpdated] DATE NULL, 
    [LastLogin] DATE NULL 
) 

這是我作爲插入數據:

private const CREATE_USER:String = "INSERT INTO User (Id, CredentialsToken, GivenName, FamilyName, LastLogin) VALUES (:id, :token, :givenName, :familyName, :lastLogin)"; 

public function createUser(args:Array):void 
{   
    if (args[0] is DatabaseResponder && args[1] is Object) 
    { 
     var sqlWrapper:SQLWrapper = this.sqlStatementFactory.newInstance(args[0], CREATE_USER); 
     var user:Object = args[1]; 
     sqlWrapper.statement.parameters[":id"] = user.Id; 
     sqlWrapper.statement.parameters[":token"] = user.LoginToken; 
     sqlWrapper.statement.parameters[":givenName"] = user.GivenName; 
     sqlWrapper.statement.parameters[":familyName"] = user.FamilyName; 
     sqlWrapper.statement.parameters[":lastLogin"] = new Date(); // this field is always empty 
     sqlWrapper.statement.execute(); 
    } 
} 

另外值得注意的是,當我通過SQLite的管理員執行下面的SQL LastLogin字段仍爲空,但Created確實已填充。

INSERT INTO User (Id, CredentialsToken, GivenName, FamilyName, LastLogin) VALUES (111, 'XYZ', 'Foo', 'Bar', '29-10-2013') 

回答

1

我不確定,該Date對象將作爲參數正確傳遞。 試試這個:

sqlWrapper.statement.parameters[":lastLogin"] = (new Date()).toISOString(); 
+0

感謝您的幫助。 'toISODateString'會導致'函數無法識別'錯誤。 'toDateString'的前一個答案不會導致sytnax錯誤,儘管它不起作用,因爲它引發了一個錯誤事件。我現在想弄明白這是爲什麼。 –

+0

它究竟發生了什麼錯誤? –

+0

謝謝你回來。我其實發現沒有問題。問題出在SQLite管理員沒有正確顯示日期字段,因爲他們需要使用Julian-> String轉換來選擇,就像這個'STRFTIME('%J',LastLogin)'一樣。謝謝。 –