Home > Database > Mysql Tutorial > body text

sqlite加载CSV文件

WBOY
Release: 2016-06-07 15:21:56
Original
1642 people have browsed it

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")
);
Copy after login

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

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() << 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(&#39;%1&#39;,&#39;%2&#39;,&#39;%3&#39;)").arg(strs.at(0)).arg(strs.at(1)).arg(strs.at(2));  
        qDebug() << cmd;  
        pQuery_->exec(cmd);  
    }  
}  
pSqlDatabase_->commit();  
Copy after login

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

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

sqlite3 test.db
.separator &#39;,&#39;
.import data.csv
test
Copy after login

sqlite加载CSV文件

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

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

    @echo off
    echo .separator &#39;,&#39; >> tmp
    echo .import data.csv test >> tmp
    sqlite3.exe test.db 0<tmp
Copy after login

 

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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template