【问题标题】:Am I understanding how to import my .csv file into sqlite?我是否了解如何将我的 .csv 文件导入 sqlite?
【发布时间】:2011-07-19 18:02:52
【问题描述】:

我目前有一个 .csv 文件,其中包含几个未标记的数据列,据我所知,这些数据在 sqlite 中转换为以下数据类型:

  • 日期时间(格式为 7/19/2011 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 项目中的“assets”文件夹中。我创建了一个扩展 SQLiteOpenHelper 的 DatabaseHelper 类,然后我可以开始在我的 Android 项目中使用和读取数据库。

我做对了吗?我以前从未使用过数据库,并且我已经看到了很多关于这样做的截然不同的说明。我的一些问题是——我必须标记 .csv 文件的列吗?我的 .csv 文件是否不够“简单”而不能仅使用 .import 并且我需要找到一个程序来翻译它?我遇到过一些网站说我需要将某些东西(我似乎没有)重命名为“_id”,但我不知道这是什么,它在哪里,或者如何做到这一点,或者是否它甚至是必要的,或者它的用途。我还缺少什么?

【问题讨论】:

  • SQLite 是无类型的,你不必担心数据类型存储。 sqlite.org/datatypes.html
  • @Pentium10:您的链接指向 sqlite 2 的数据类型文档,而不是 sqlite 3。

标签: android eclipse sqlite csv


【解决方案1】:

我认为除了第一个日期时间列之外,您的理解是“正确的”。您应该使用 TEXT 类型,而不是数字类型。

此外,您可以在导入后检查数据以查看是否一切正常,尤其是使用日期时间字段:

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

更新

回应 OP 的最后评论:我对您如何存储日期(时间)的理解是它取决于您的上下文。因此,如果平面文件中的日期格式为“2011 年 7 月 19 日下午 12:00:00”,那么无论如何它都会在没有任何转换的情况下被导入为 TEXT。

【讨论】:

  • 我也对日期时间位感到困惑,但 sqlite.org/datatype3.html 建议它应该是 NUMERIC ......虽然可能没有 AM/PM 之类的格式不同。
  • +1 - 同意。您通常希望对日期使用类型相似性 TEXT。通常。
【解决方案2】:

将 csv 导入数据库是 15 行代码任务,它让您可以更好地控制这个过程。 像“var3”这样的表列名称很糟糕,但是不需要在数据库中重命名它,您可以使用 sql 别名:

select myVar1 _id, myVar2 from myTable 

_id 是表的主键列的通用名称(通常是数字列,必须是唯一的)。每个使用数据存储的 ADK 类都假定在其上进行中继,因此使用此约定很好。 如果您只想要只读数据库,您可以在本地准备数据库并找到一些 tutorials 如何将其包含到您的应用程序中。

【讨论】:

  • 我没有将我的变量命名为“var”、我的文件“file”或我的表“table”......这只是为了示例。由于我的数据库是按日期/时间排序和访问的,你是说第一列,而不是被称为 myVar1,应该被称为 _id?所以我应该将它声明为 create table myTable (_id text, myVar2 real, myVar3 text, myVar4 real); ?是的,我只想要一个只读数据库。您能否将我链接到您所说的这些教程之一?
  • 我已经链接了一些博客文章,女巫似乎有效。我还建议您熟悉诸如主键之类的基本数据库概念——它太复杂了,无法在这里解释。 android中具有主键的列应命名为“_id”类型的数字,并且该列中的值必须是唯一的,因为严格识别单行。在非常简化的方式中,您可以将其视为“行号”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多