Maison > base de données > tutoriel mysql > le corps du texte

sqlite加载CSV文件

WBOY
Libérer: 2016-06-07 15:21:56
original
1642 Les gens l'ont consulté

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")
);
Copier après la connexion

有一外部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();  
Copier après la connexion

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

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

sqlite3 test.db
.separator &#39;,&#39;
.import data.csv
test
Copier après la connexion

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
Copier après la connexion

 

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

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal