2011-09-19 62 views
6

我需要使用rawQuery方法存儲記錄,因爲我想插入當前的日期和時間(datetime()),但我還需要插入包含引號的字符串。如何使用rawQuery插入記錄

所以我寫了這個代碼:

String sql="INSERT INTO sms VALUES (null, ?1, ?2, ?3, datetime())"; 
dbw.rawQuery(sql, new String[]{str1,str2,str3}); 

但它不會存儲任何東西......有什麼不對?

[編輯]

這樣,我不明白的錯誤,但記錄未插入。

String mitt="mitt", dest="dest", text="text"; 
String sql="INSERT INTO sms VALUES (null, ?, ?, ?, datetime('NOW'))"; 
dbw.rawQuery(sql, new String[]{mitt,dest,text}); 

此時,該工程中插入一條記錄(帶引號的問題)的唯一方法是execSQL(String s)

回答

15

SQLite沒有本地日期時間數據存儲類型。它可以存儲一個字符串或日期的整數表示。

要轉換你的價值觀,你可以使用Sqlite Date and Time functions documentation

您最初的嘗試詳細的日期時間函數幾乎是正確的,但你的日期時間()函數調用需要的'NOW'參數。你

String sql="INSERT INTO sms VALUES (null, ?, ?, ?, datetime('NOW'))"; 

還應呼籲execSQL代替rawQuery這是期待返回記錄集。

dbw.execSQL(sql, new String[]{str1,str2,str3}); 

可以ALO指定單獨的列中插入數據的查詢中的表名之後插入字段列表如果不插入所有的值

String sql = "INSERT INTO sms(f1, f2, f3, f4)" 
      + "VALUES (null, ?, ?, ?, datetime('NOW'))"; 

這是可能的另一種選擇是using a default timestamp in SQLite成,雖然我沒有嘗試過這在android中。

+0

我編輯的問題 – supergiox

+0

難道rawQuery不INSERT工作?文檔中沒有提到任何有關它的信息 – supergiox

+0

Nothing ...這是可以工作的方法(eccept爲引號):'String sql =「INSERT INTO sms VALUES(null,'」+ mitt +「','」+ dest +「 ','「+ text +」',datetime('NOW'))「; dbw.execSQL(sql);' – supergiox

-2

試試這樣說:

ContentValues values; 
values=new ContentValues(); 

// values.put("field_name",value); 
values.put("id", 5); 
values.put("name", name); 
dbw.insert("table_name", null, values); 
+0

但通過這種方式我不能使用datetime() – supergiox

+0

您可以將datetime保存爲sqlite數據庫中的long值。通過獲取cal.getTimeinMillis();並可以將long值轉換爲java中的dataTime。 –

+0

我想使用sqlite的datetime()來避免格式​​問題......但如果這是唯一的方法,我該如何將getTimeinMillis()轉換爲datetime? – supergiox

-2
String sql="INSERT INTO sms VALUES (null, '"+str1+"', '"+str2+"', '"+str3+"', datetime())"; 
dbw.rawQuery(sql, null); 

馬克的單引號。

+0

我已經這樣做了,但問題仍然存在... – supergiox

+1

使用直接串在SQL查詢可以使你的代碼容易出現SQL注入,不使用它 – Anuj

3

我解決了這個問題,在這樣:

String sql="INSERT INTO sms VALUES (null,?,?,?,datetime('NOW'))"; 
dbw.execSQL(sql,new Object[]{mitt,dest,text}); 

最後,我可以每個字符存儲沒有問題!

+0

不幸的是,當我發現它時,我還沒有看到你的答案......無論如何,你應該接受! – supergiox

+0

那麼對於execSQL的手冊呢: 執行一個不是SELECT/INSERT/UPDATE/DELETE的SQL語句 – Enriqe