加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite加载CSV文件

发布时间:2020-12-12 20:11:09 所属栏目:百科 来源:网络整理
导读:sqlite加载外部的CSV文件算是一个比较常见的需求. 假设有一sqlite数据库test.db内有一表名为test.对应sql语句为: CREATE TABLE "test" (" "id" INTEGER NOT NULL," "name" TEXT NOT NULL," "phone" TEXT NOT NULL," "PRIMARY KEY ("id") ); 有一外部CSV文件d

sqlite加载外部的CSV文件算是一个比较常见的需求.

假设有一sqlite数据库test.db内有一表名为test.对应sql语句为:

CREATE TABLE "test" ("
"id" INTEGER NOT NULL,"
"name" TEXT NOT NULL,"
"phone" TEXT NOT NULL,"
"PRIMARY KEY ("id")
);

有一外部CSV文件data.csv内容如下

5,aaaa,139******
2,bbbb,138******
3,cccc,136******


要把此CSV数据弄到数据库test表中有两种方式.

1. 自己解析CSV文件,然后把数据逐行INSERT INTO 到表内.

因为文件格式其实自己已经知道,所以其实要解析这样的CSV文件没什么难度,某些语言(或者某些库)在字符串处理上有spilt就更为方便.

数据可能比较多,不要直接INSERT INTO,开启事务节能约不少时间.下面有我写的Qt的代码可供参考

QFile file(filePath);
if(!file.open(QFile::ReadOnly))
{
	qDebug() << "文件打开失败";
	qDebug() << file.errorString();
}

QTextStream in(&file);

pSqlDatabase_->transaction();
while (!in.atEnd())
{
	QString str;
	in >> str;
	qDebug() << str;
	QStringList strs = str.split(",");

	if(3 == strs.size())
	{
		QString cmd = QString("INSERT INTO test VALUES('%1','%2','%3')").arg(strs.at(0)).arg(strs.at(1)).arg(strs.at(2));
		qDebug() << cmd;
		pQuery_->exec(cmd);
	}
}
pSqlDatabase_->commit();

2. 使用sqlite的.import file table命令.

这里方法就没那么直接了,首先再执行.import file table命令之前需要调用.separator ','设置分割符在命令行下大致是这样的:

sqlite3 test.db

.separator ','

.import data.csv test

然而很多语言很多库虽然都可以打开外部程序,但打开之后再交互就比较蛋疼,这里采用的是曲线救国的方式.

以Windows平台为例,其他平台自己改一下脚本,写一Windows批处理load.bat内容如下:

@echo off
echo .separator ',' >> tmp
echo .import data.csv test >> tmp
sqlite3.exe test.db 0<tmp

然后从外部调用这个批处理即可.


参考:

http://alvinalexander.com/android/sqlite-csv-import-data-table-primary-key

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读