Heim  >  Artikel  >  Datenbank  >  sqlite加载CSV文件

sqlite加载CSV文件

WBOY
WBOYOriginal
2016-06-07 15:21:561591Durchsuche

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内容如下

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

 

 

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

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

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

 

                

 

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

 

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:MongoDB千万级数据的分析Nächster Artikel:锁的理解