• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

sqlite加载CSV文件

mysql 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

sqlite加载CSV文件 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文件dat

sqlite加载CSV文件

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内容本文来源gao@daima#com搞(%代@#码@网2如下

5,aaaa,139******

2,bbbb,138******

3,cccc,136******

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

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

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

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

[html] QFile file(filePath);  if(!file.open(QFile::ReadOnly))  {      qDebug() << "文件打开失败";      qDebug() <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() <exec(cmd);      }  }  pSqlDatabase_->commit();  

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

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

sqlite3 test.db.separator ','.import data.csvtest

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

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

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:sqlite加载CSV文件

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址