是否可以获取res/raw资源目录中存储的CSV文件并使用它填充sqlite3数据库中的表?

我的 idea 是,如果有一种方法可以将整个文件批量导入到表中,那么这将比遍历文件中的每一行并执行单个insert语句更干净、更快...

我发现有一个sqlite import命令允许这样:How to import load a .sql or .csv file into SQLite?

.但在我的Android应用程序中应用这些语句时遇到了问题.我的第一个 idea 是try 下面这样的方法,但没有成功:

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); 

这个是可能的吗?

我应该try 另一种方法来填充我的数据库吗?

更新:我将Josef的响应标记为答案(使用事务进行批量插入),因为它工作得很好,并且可以根据我的标题直接回答我的问题(谢谢Josef).然而,我仍然在寻找一种方法,可以使用IMPORT语句在Android应用程序中使用IMPORT语句从CSV文件批量插入到sqlite3表中.如果您知道如何做到这一点,请回复.

谢谢你的回答!

推荐答案

如果您想将静电数据与您的应用程序一起打包,我建议您在开发时准备数据库(使用您喜欢的任何UI或csv-import命令),并将SQLITE文件放在Assets文件夹中.然后,当您的应用程序第一次运行时,您可以简单地将整个sqlite文件复制到设备上.These posts将带您了解这个 idea ,这很可能是设置数据库的最快方式(文件复制速度).

如果出于某种原因,您确实需要在运行时插入大量数据,我建议您考虑使用bulk insert using transactions的方法来加快速度.

Database相关问答推荐

UML 类图中关联的复杂规则

使用 prisma ORM 在我的迁移中手动添加触发器

如何使用用户定义的字符串索引数据框?

怎么修复ORA-28001: the password has expired

docker-compose mysql init sql 未执行

授予对具有特定前缀的多个表的权限

免费的便携式数据库有哪些?

连接池策略效果怎样?

Redis:数据库大小与内存的比率?

如何在磁盘上布局 B-Tree 数据?

如何将 Android 手机上的 SQLite 数据库与服务器上的 MySQL 数据库同步?

如何使用 MySQL Workbench 架构差异两个数据库?

postgreSQL 同时将列类型从 int 更改为 bigint

如何在没有验证提取的情况下将 MSSQLServer 数据库提取为 .dacpac?

如何在文件系统中存储图像

数据库触发器的命名约定

Python中的内存数据库

如何删除除了postgres中的少数数据库之外的所有数据库

在 MYSQL 的子查询中使用 LIMIT 关键字的替代方法

如果值不为空,则用于更新数据库的 Sql 查询?