从CSV文件填充Android数据库?

是否有可能采取存储在res / raw资源目录中的csv文件,并使用它来填充sqlite3数据库中的表?

我的想法是,如果有一种方法可以将整个文件批量导入到表格中,那么比迭代文件中的每一行并执行单个插入语句更清晰快捷。

我发现有一个sqlite导入命令,允许这样做: 如何导入加载一个.sql或.csv文件到SQLite

…但我无法在Android应用程序中应用这些语句。 我的第一个想法是尝试像下面的东西…但没有运气:

db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY, name TEXT)"); db.execSQL(".mode csv"); db.execSQL(".import res/raw/MyFile.csv " + TABLE_NAME); 

这可能吗?

我应该尝试一种不同的方法来填充我的数据库?

更新:我标记Josef的答案(批量插入使用交易),因为它工作正常,直接回答我的问题根据我的标题(谢谢约瑟夫)。 不过,我仍然在寻找一种方法,使用import语句将csv文件中的Android应用程序批量插入到sqlite3表中。 如果你知道如何做到这一点,请回复。

谢谢你的答案!

如果您想要将静态数据打包到您的应用程序中,我build议您在开发时准备数据库(使用您喜欢的任何UI或csv-import命令)并将sqlite文件传送到assets文件夹中。 然后,您可以简单地将您的应用程序第一次运行时,将整个sqlite文件复制到设备上。 这些 post带你通过这个想法,这很可能是build立一个数据库(文件复制速度)最快的方式。

如果出于某种原因需要在运行时插入大量数据,我build议您查看使用事务进行批量插入的方法以加快速度。

我花了很多时间寻找一个简单的解决scheme,并自己提出了一点点的代码。 对于像我这样的未来的人来说,你可以使用这个:

 BufferedReader in = new BufferedReader(your csv file source here); String reader = ""; while ((reader = in.readLine()) != null){ String[] RowData = reader.split(","); date = RowData[0]; value = RowData[1]; ContentValues values = new ContentValues(); values.put(CsvProvider.DATE, date); values.put(CsvProvider.VALUE, value); getContentResolver().insert(CsvProvider.CONTENT_URI, values); } in.close(); 

我的CSV文件没有标题,只有2列,但两列以上不应该是一个问题。 只记得指定什么是拆分你的列,并为每一列添加另一个RowData[#] (你必须以0开头)。 在调用in.close()之前,你要确定你要做的每一行in.close()完成。 我正在使用一个内容提供者,但你可以真正做任何你想要的数据,像追加到一个String[]或其他任何东西。

当我使用inputstream时,您可以将BufferedReader指向任何您想要的位置。 只要BufferedReader可以读取它就可以工作。