2011-07-19 72 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