我有一个.csv文件,我把它变成了一个SQLite数据库,第一列作为日期和时间(作为TEXT数据类型,因为它的格式为7/20/2011 12:00:00 PM),第二列column作为subsecond(一个REAL,如0.142857),其余列作为关于那个时间的数据。我将在我的Android应用程序中将其用作只读数据库,其中用户选择开始时间和结束时间,然后在该时间段内以图形方式显示数据。
这是我第一次使用数据库,我不知道如何使用它。我相信每行需要一个唯一的NUMERIC主键,但只是按行号标记它们是浪费空间。第一列不是唯一的,并且无论如何都是TEXT数据类型,但如果亚秒以某种方式合并,那么它将是唯一的。但我真的无法重写数据库,因为它有65534行...你如何建议我访问这个数据库中的特定时间?
答案 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;