Qt解析Excel文件并将数据插入远程数据库MySQL
来源:互联网 发布:在淘宝卖茶叶 编辑:程序博客网 时间:2024/06/06 17:35
因为 需求,这两天自己试着用Qt链接了远程数据库MySQL,其中更是算出多多啊。
很重要的一点:在.pro文件里面添加 sql应该都知道,但还要加一句 CONFIG += qaxcontainer
ipServer = ip; //远程数据库的IPportServer = port; //远程数据库的端口sqlName = sqlname; //远程数据库的名称userNameServer = usernameServer; //用户名passwdServer = passwd; //远程数据库密码tableName = tablename; //操作表单名称
接下来就是跟远程数据库链接,即打开远程数据库,如果你的数据库没有做过任何修改的话,运行程序是会报错的,因为MySQL数据库默认的都是localhorst,提示信息是:你的数据库拒绝IP。。。的访问,这时候就要先设置数据库能被你自己主机的ip访问,具体代码如下:
grant all PRIVILEGES on test.* to 'user'@'192.168.42.1' identified by 'passwd'; //test是某个特定的数据库
//OpenDB();
try { if(pDB) { closeDB(); } pDB = new QSqlDatabase(); *pDB = QSqlDatabase::addDatabase(connName); pDB->setHostName(ipServer); pDB->setPort(portServer); pDB->setDatabaseName(sqlName); pDB->setUserName(userNameServer); pDB->setPassword(passwdServer); if(pDB->open()) { qDebug()<<"*********************打开数据库成功******************"; if(pQuery) { delete pQuery; pQuery = NULL; } pQuery = new QSqlQuery(*pDB); } else { qDebug()<<"*********************打开数据库失败******************"; qDebug()<<pDB->lastError().text(); } } catch(...) { return -1; } return 0;
对数据库的操作我只写了一部分,只有插入数据的部分,其余的都跟这个差不多;
//写数据void SqlConn::WriteData(QString strsql){ if (pDB->isOpen()) { pQuery->exec(strsql); } else { return; }}
我的远程数据库是在Linux下的,换需要修改数据库的绑定连接的地址,这个不同的版本会在不同的文件里面出现
cd/etc/mysql,进入这个文件夹后,就只有靠你一个一个慢慢查找了。一般会在mysql.cnf.d/mysql.cnf文件里,注释掉
bind-address =127.0.0.1
这个文件是只读的文件,所以在打开的时候用root 账户。
如下图所示:
数据库打开成功之后,就要解析Excel文件,当然如果你想成功的插入数据,你就得确保数据库表单和Excel表单具有完全一样的表头,当然你也可以根据Excel表头创建数据库表单后再插入数据,因为写了一个可以插入任何数据库的小工具,所以Excel文件是这样的。
第一行是表头,第二行表示数据库表单的值得类型,0表示int,1表示varchar;接下来的就是数据了。
解析Excel文件代码:
QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); QAxObject *work_books = excel.querySubObject("WorkBooks"); work_books->dynamicCall("Open (const QString&)", FilePath); QVariant title_value = excel.property("Caption"); //获取标题 qDebug()<<QString("excel title : ")<<title_value; QAxObject *work_book = excel.querySubObject("ActiveWorkBook"); QAxObject *work_sheets = work_book->querySubObject("Sheets"); //Sheets也可换用WorkSheets int sheet_count = work_sheets->property("Count").toInt(); //获取工作表数目 for(int i=1; i<=sheet_count; i++) { QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i); QString work_sheet_name = work_sheet->property("Name").toString(); //获取工作表名称 QString message = QString("sheet ")+QString::number(i, 10)+ QString(" name"); } if(sheet_count > 0) { QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1); QAxObject *used_range = work_sheet->querySubObject("UsedRange"); QAxObject *rows = used_range->querySubObject("Rows"); QAxObject *columns = used_range->querySubObject("Columns"); int row_start = used_range->property("Row").toInt(); //获取起始行 int column_start = used_range->property("Column").toInt(); //获取起始列 int row_count = rows->property("Count").toInt(); //获取行数 int column_count = columns->property("Count").toInt(); //获取列数 //获取数据库表单值的类型 int keyType[column_count]; for(int i = column_start;i <= column_count;i ++) { QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", 2, i); int value = cell->dynamicCall("Value2()").toInt(); keyType[i-1] = value; } //获取Excel文件单元格的值并编辑sql语句 for(int i = row_start+2; i <= row_count;i++) { QStringList list; for(int j = column_start; j <= column_count;j++) { QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j); QString Value = cell->dynamicCall("Value2()").toString(); list<<Value; if(keyType[j-1] == 0) { strSql = strSql +QString("%1").arg(Value); } else { strSql = strSql + QString("'%1'").arg(Value); } if(j < column_count ) { strSql = strSql + QString(","); } else { strSql = strSql + QString(")"); } } //调用写数据函数,将数据插入数据库 this->WriteData(strSql); //小红心编辑strSql,准备读取下一行数据 strSql = QString("insert into %1 values(").arg(tableName); } }
1 0
- Qt解析Excel文件并将数据插入远程数据库MySQL
- 将excel数据解析并插入数据库
- struts2上传excel文件并解析数据插入数据库
- 解析.CSV文件中的数据并将其插入到数据库中代码
- php读取txt文件并将数据插入到数据库
- php读取txt文件并将数据插入到数据库
- php读取txt文件并将数据插入到数据库
- java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中
- 上传excel文件并将里面的数据放入数据库
- 读取Excel文件中的数据,并将其导入数据库
- 上传,解析Excel文件并保存数据到数据库
- asp.net 读取Excel数据并将数据插入到数据库中
- asp.net 读取Excel数据并将数据插入到数据库中
- perl解析日志文件并插入数据库
- xml解析得到数据并将其插入数据库(dom4j非Xpath方式)
- 创建Xml文件,并解析该Xml数据,并插入数据库
- 解析excel表获取数据,并从远程服务器下载和上传文件
- php-将excel表格中数据插入到mysql数据库中
- PL/SQL连接oracle时弹出空白框
- Swift开发基础 二
- 看看Spring的源码——Bean加载过程
- Cocos2d-x 3.x项目设置Android里的横竖屏显示
- 关于The serializable class UsersServlet does not declare a static final serialVersionUID field of type
- Qt解析Excel文件并将数据插入远程数据库MySQL
- IOS-TextField知多少
- 最高分是多少(华为2016校招)
- 调用百度地图api (javascript)
- ffplay播放音频和视频命令
- Express架构
- 文字 11种HTML5和CSS3炫酷文字样式和鼠标滑过特效
- DFA算法去重效果
- html5 canvas 2d 绘图学习笔记