2011-07-19 104 views
3

我現在有幾個數據未標記的列,這給我的知識轉化爲以下數據類型SQLite中.csv文件:我理解如何將我的.csv文件導入到sqlite中?

  • 日期時間(格式:2011/7/19 12:00:00 PM ) - >數字
  • 雙 - >真正
  • CHAR(1) - >文本
  • 浮動 - >真正

我可以通過執行以下命令來創建數據庫:

sqlite> create table myTable (myVar1 numeric, myVar2 real, myVar3 text, myVar4 real); 
sqlite> .separator "," 
sqlite> .import myFile.csv myTable 

然後我複製並粘貼新創建的myTable.db到我的項目在eclipse中的「資產」文件夾。我創建了一個擴展SQLiteOpenHelper的DatabaseHelper類,然後我可以開始在Android項目中使用和讀取數據庫中的數據。

我是否正確?我以前從未使用過數據庫,因此我已經看到了很多完全不同的說明。我的一些問題是 - 我必須標記我的.csv文件的列嗎?我的.csv文件不夠「簡單」,不足以使用.import,我需要找到一個程序來翻譯它?我遇到過一些網站,說我需要重新命名一些東西(我似乎沒有)去「_id」,我不知道這是什麼,這是什麼,或者如何做,或者如果它甚至是必要的,或者它的用途。我還有什麼遺漏?

+0

SQLite是無類型的,你不必擔心數據類型的存儲。 http://www.sqlite.org/datatypes.html – Pentium10

+0

@ Pentium10:你的鏈接指向sqlite 2的數據類型的文檔,而不是sqlite 3. – 2011-07-19 18:35:21

回答

3

我認爲除了那個第一個日期時間列外,你會得到它的「正確」。您應該使用TEXT類型,而不是數字類型。

此外,您還可以在導入後檢查你的數據,看看是否一切都很好,尤其是與時間字段:

SELECT * FROM myTable ORDER BY RANDOM() LIMIT 10; 

UPDATE

爲響應OP的最後意見:我瞭解你如何存儲日期(時間)是取決於你的上下文。因此,如果平面文件中的日期格式爲「2011年7月19日中午12:00:00」,則無需進行任何轉換,無論如何都將導入爲TEXT。

+1

我也對日期時間位感到困惑,但http:// sqlite .org/datatype3.html建議它應該是NUMERIC ...雖然也許這是不同的格式,沒有AM/PM和什麼。 – Kalina

+0

@TheBEatlemaniac:看我的更新 – 2011-07-19 19:19:08

+0

+1 - Concur。您通常希望對日期使用類型關聯TEXT。通常情況。 –

1

將csv導入數據庫是15行代碼任務,它使您可以更好地控制此過程。 表列,如「VAR3」名稱是太可怕了,但也沒有必要給它的數據庫重命名你可以用SQL別名:

select myVar1 _id, myVar2 from myTable 

_id是表的主鍵列通用名稱(它通常是數字列女巫必須是唯一的)。每個使用數據存儲的ADK類都假設它是中繼,所以使用這個約定是很好的。 如果你只是想要只讀數據庫,你可以在本地準備數據庫,並找到一些tutorials如何將它包括到你的應用程序。

+0

我沒有命名我的變量「var」,我的文件「文件」或我的表「表」......這只是爲了這個例子。 由於我的數據庫按日期/時間排序和訪問,你是說第一列,而不是被稱爲myVar1,應該被稱爲_id?所以我應該聲明它爲create table myTable(_id text,myVar2 real,myVar3 text,myVar4 real); ? 是的,我只是想要一個只讀數據庫。你能把我鏈接到你講的這些教程之一嗎? – Kalina

+0

我已經鏈接了一些博客帖子女巫似乎工作。我還建議你熟悉基本的數據庫概念,如主鍵 - 這太複雜了,可以在這裏解釋它。 android中具有主鍵的列應該命名爲「_id」類型數字,並且該列中的值由於嚴格標識單行而必須是唯一的。以**非常簡單的方式,您可以將其視爲「行號」 – piotrpo