2011-07-20 23 views
0

我有一個.csv文件,我把它變成一個SQLite數據庫,第一列作爲日期和時間(作爲TEXT數據類型,因爲它的格式爲7/20/2011 12:00:00 PM),第二列作爲亞秒(REAL,如0.142857),其餘列作爲關於該時間的數據。我將在我的Android應用程序中將其用作只讀數據庫,用戶在其中選擇開始時間和結束時間,然後在該時間段內以圖形方式顯示數據。在我的SQLite數據庫中使用什麼主鍵?

這是我第一次使用數據庫,我不確定如何處理這個問題。我相信我需要每行都有一個唯一的NUMERIC主鍵,但只是按行號標記它們是浪費空間。第一列不是唯一的,並且是TEXT數據類型,但是如果亞秒被以某種方式合併,那麼它將是唯一的。但我真的不能重寫數據庫,因爲它有65534行......你如何建議我訪問這個數據庫中的特定時間?

回答

2

在Android中,您需要在數據庫中有一個名爲_ID的列(否則您稍後會遇到一些問題)。您將使用它作爲主鍵。

的日期和時間可存儲在SQLite的在以下格式文本列的形式(參見http://www.sqlite.org/datatype3.html):

TEXT如ISO8601字符串(「YYYY-MM-DD HH:MM:SS .SSS「)

如果您的數據庫是靜態的,只需使用SQLite數據庫瀏覽器等工具將其轉換爲適用於Android的格式即可。

+0

那麼你是否說我需要創建一個新的_ID列?由於我不能使用我的文本列,我應該只是按行號來做,然後呢? – Kalina

+0

是的,您無論如何都需要_ID列來製作ContentProvider,... –

0

如果你的數據庫是本地和外部的(不是遠程的),你必須有_id和另一個表android_metadata,它將容納語言環境。

如果您的數據庫是遠程的。是的,如果你寫作的話,只有速度問題,因爲你沒有。使用WHERE子句可以完成這項工作。

0

每個日期可以被轉換成數字時間戳很簡單:

Date date = new Date(); 
long timestamp = date.getTime(); 
Date otherDate = new Date(timestamp); 

數字更容易和更快的比文本字段來處理。如果您完全確定,您在列中有獨特的數據,則可以將其用作主鍵。

導入CSV文件導入到表應該也很容易:

//just open file in some known way and read it line by line 
// we have declared String[] data, String line is line read from your csv somewhere earlier 
// in code 

data = line.split(","); 
//here you have to process values, and execute insert statement 

您必須對將被用於搜索或訂單數據每列創建索引。請注意,表中的行沒有「默認」,「自然」或任何其他順序。如果你執行兩次相同的select語句,你可以得到兩個完全不同的排序結果。所以簡單的選擇語句應該看起來像這樣:

select 
    _id, other_colum_name, some_other_column 
from 
    table_name 
where 
    column_name = 5 
    and other_column_name = 3 
order by 
    column_name; 
相關問題