当前位置:  开发笔记 > 数据库 > 正文

从CSV文件填充Android数据库?

如何解决《从CSV文件填充Android数据库?》经验,为你挑选了2个好方法。

是否可以将存储在res/raw资源目录中的csv文件用于填充sqlite3数据库中的表?

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

我发现有一个sqlite import命令允许这样:如何导入将.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的回复标记为答案(使用交易批量插入),因为它工作正常并根据我的标题直接回答我的问题(感谢Josef).但是,我仍在寻找一种方法,使用import语句在csv文件中将Android应用程序批量插入到sqlite3表中.如果你知道怎么做,请回复.

谢谢你的回答!



1> Josef Pflege..:

如果要将静态数据打包到应用程序中,我建议在开发时准备数据库(使用您喜欢的任何UI或csv-import命令)并将sqlite文件发送到assets文件夹中.然后,您可以在首次运行应用程序时将整个sqlite文件复制到设备上.这些 帖子将带您了解这个想法,这很可能是设置数据库的最快方式(文件复制速度).

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


使用预构建的sqlite3文件进行运输并不是一个好习惯.制造商可以实现/利用他们想要的任何技术,但必须遵守sqlite3接口 - 因此预构建的sqlite3可能无法在某些设备上运行.因此,最好/最安全的做法是始终让您的设备创建数据库,然后批量导入数据库.

2> Opy..:

我花了很多时间寻找一个简单的解决方案,并自己想出了一些代码.对于未来的人来说,就像我一样,你可以使用这个:

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().我正在使用内容提供商,但您可以随心所欲地使用数据,例如将其附加到String[]其他内容或其他任何内容.

当我使用输入流时,您可以将BufferedReader指向您想要的任何位置.只要BufferedReader能够读取它就可以了.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有