在我的SQLite数据库中使用什么主键?

时间:2011-07-20 15:48:24

标签: android database sqlite primary-key

我有一个.csv文件,我把它变成了一个SQLite数据库,第一列作为日期和时间(作为TEXT数据类型,因为它的格式为7/20/2011 12:00:00 PM),第二列column作为subsecond(一个REAL,如0.142857),其余列作为关于那个时间的数据。我将在我的Android应用程序中将其用作只读数据库,其中用户选择开始时间和结束时间,然后在该时间段内以图形方式显示数据。

这是我第一次使用数据库,我不知道如何使用它。我相信每行需要一个唯一的NUMERIC主键,但只是按行号标记它们是浪费空间。第一列不是唯一的,并且无论如何都是TEXT数据类型,但如果亚秒以某种方式合并,那么它将是唯一的。但我真的无法重写数据库,因为它有65534行...你如何建议我访问这个数据库中的特定时间?

3 个答案:

答案 0 :(得分:2)

在Android中,您需要在数据库中使用名为_ID的列(否则稍后您将面临一些问题)。您将使用它作为主键。

日期和时间可以采用以下格式的文本列形式存储在SQLite中(请参阅http://www.sqlite.org/datatype3.html):

  

TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)

如果您的数据库是静态的,只需使用SQLite数据库浏览器等工具将其转换为便于Android的格式。

答案 1 :(得分:0)

如果您的数据库是本地和外部(非远程),那么您必须拥有_id和另一个将保存语言环境的另一个表android_metadata。

如果您的数据库是远程的。是的,如果你是写的话,你只能是速度问题,因为你没有。使用WHERE子句可以完成工作。

答案 2 :(得分: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语句应如下所示:

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