将多个文本文件中的数据写到SqlLite中
来源:互联网 发布:撩妹 知乎 编辑:程序博客网 时间:2024/05/19 18:14
文件中数据的格式
2010_C0001 ㎏
2010_C0002 ㎏
2010_C0003 ㎏
2010_C0004 ㎏
2010_C0005 ㎏
2010_C0006 ㎏
2010_C0007 ㎏
2010_C0008 ㎏
2010_C0009 ㎏
2010_C0010 ㎏
...
privateQSqlDatabasem_db;
需要将1千万条的如上示格式的数据写入sqllite数据库中,文件中的数据格式是(定额库ID_材料ID单位),
数据文件存储在特定的目录下,存在多个数据文件,为txt格式。我们需要将定额库ID_材料ID与单位数据存储在
数据表中,定额库ID与对应的数据表表名存储在索引表中。
boolGCreateSqliteTable::createDB()
{
//初始化sqllite数据库,包括建库与建表
initDB();
//文件名不为空
if (!m_dirPath.isEmpty())
{
QStringList filesList;
//添加需要数据文件(过滤、添加)
addSubFolderFiles(filesList,m_dirPath,QString("*.txt"));
for (inti = 0;i < filesList.size();++i)
{
qDebug() << QString("read%1 datawrite toGUnitsDB").arg(filesList.at(i));
QFile file(filesList.at(i));
if (!file.open(QIODevice::ReadOnly))
{
qDebug() << "Openfailed." << endl;
return false;
}
//将数据导入数据表与索引表
createTable(file);
file.close();
qDebug() << "writesuccess";
}
}
qDebug() << "success--------------";
return true;
}
新建两张表,一张索引表,字段名是定额库ID(例如2010)、新建的表名另一张表是具体
的数据表,包括定额库ID_材料ID(2010_C0001),单位(kg),首先需要确定新建的数据表
个数,而后定额库ID %数据表个数将不同的定额库ID数据导入不同的数据表中。
voidGCreateSqliteTable::initDB()
{
m_db =QSqlDatabase::addDatabase("QSQLITE");
m_db.setDatabaseName("GUnitsDB");
if (!m_db.open())
{
qDebug() << "Cannotopen database";
return;
}
QSqlQuery query(m_db);
//创建索引表
query.exec("createtable UnitTableIndex(idtext primarykey, tableNametext)");
for (inti = 0;i < c_tableCount;++i)
{
//根据索引表创建数据表
query.exec(QString("createtableUnitTable%1(codetextprimarykey,unit text)").arg(i));
}
}
导数据进数据库过程。注意文件数据的读取方式。
voidGCreateSqliteTable::createTable(QFile&file)
{
if (!m_db.isOpen())
{
qDebug() << "errorerror error";
}
QString lastTableName;
//开启事务
m_db.transaction();
while (!file.atEnd())
{
QTextStream txtOutput(file.readLine());
QString sNorm;
QString sUnit;
txtOutput >> sNorm >> sUnit;
QStringList slNorm(sNorm.split("_"));
QString tableName = QString("UnitTable%1").arg(slNorm.first().toInt()% c_tableCount);
QSqlQuery query(m_db);
query.exec(QString("insertinto UnitTableIndex(id,tableName) values('%1','%2')")
.arg(slNorm.first())
.arg(tableName));
query.exec(QString("insertinto %1(code,unit) values('%2','%3')")
.arg(tableName).arg(sNorm).arg(sUnit));
if (lastTableName!= tableName)
{
m_db.commit();
m_db.transaction();
lastTableName =tableName;
}
}
//结束事务
m_db.commit();
}
自动递归过滤文件。
voidGCreateSqliteTable::addSubFolderFiles(QStringList&fileList, QString&path, QString&filter)
{
QDir dir(path);
if (!dir.exists())
{
qDebug() << "notfind dirpath";
return;
}
QStringList filters;
filters << filter;
QDirIterator dir_iterator(path, filters,
QDir::Files| QDir::NoSymLinks,
QDirIterator::Subdirectories);
while (dir_iterator.hasNext())
{
dir_iterator.next();
QFileInfo file_info = dir_iterator.fileInfo();
QString file_path = file_info.absoluteFilePath();
fileList.append(file_path);
}
}
- 将多个文本文件中的数据写到SqlLite中
- 把集合中的数据写到文本文件
- Excel数据导入到SqlLite中
- 把ArrayList集合中的字符串内容写到文本文件中
- ArrayList集合中的字符串数据存储到文本文件|文本文件中读取数据到集合
- 写数据到文本文件的实现之一
- 将excel表中的数据写到txt文本文件的Python脚本
- sqlserver 导出数据到 sqllite
- sqlserver 导出数据到 sqllite
- 收集两个C++写的从文本文件中读取数据保存到数组的程序
- DBGrid 中的数据导出到文本文件
- 把Oracle中的数据导到文本文件
- 把文本文件中的数据读取到集合
- 转:如何选择 Excel 中的数据列,然后将数据粘贴到文本文件中?
- 文本文件数据导入到sql2005中
- 从Oracle中导出数据到文本文件
- 动态数据存放到文本文件中
- 写日志到文本文件
- 标签显示输入的内容【同一个视图中】
- [Android 动画]简要分析一下Animator 与 Animation
- 操作系统单选题
- unity游戏开发之NGUI的UISprite染色
- AWR报告生成
- 将多个文本文件中的数据写到SqlLite中
- java如何保存上传后的文件 (struts2与struts1)
- 代码整洁
- 工控仪表控件Iocomp ActiveX系列教程:添加CAB文件到HTML页面
- 操作系统判断题
- 从html文本中获取所有img标签
- How Tomcat Works 读书笔记 八 载入器 上
- C#利用 string.Join 泛型集合快速转换拼接字符串
- 操作系统名词解释