一个人怎样做网站,网络营销学什么内容,外贸原单是什么意思,陕西省建设执业注册中心网站本文将详细介绍如何在Qt应用程序中集成MySQL数据库#xff0c;并封装实现好用的mysql数据库操作类。包括环境准备、连接数据库、执行查询及异常处理等关键步骤#xff0c;同时包含mysql驱动的编译。分享给有需要的小伙伴#xff0c;喜欢的可以点击收藏。 目录
环境准备
项… 本文将详细介绍如何在Qt应用程序中集成MySQL数据库并封装实现好用的mysql数据库操作类。包括环境准备、连接数据库、执行查询及异常处理等关键步骤同时包含mysql驱动的编译。分享给有需要的小伙伴喜欢的可以点击收藏。 目录
环境准备
项目配置
简单使用 简单示例
模块类封装 如何使用
附qsqlmysql库的构建
前提条件
构建步骤
1. 查找Qt的安装路径和编译器
2. 设置环境变量
3. 获取MySQL开发库
4. 构建 qsqlmysql 插件
Windows:
Linux:
5. 将编译好的插件拷贝到合适的位置
注意事项
其他资源 Qt提供了QtSql模块来进行独立于平台的数据库操作这里的“平台”既包括操作系统平台也包括各个数据库平台。Qt使用一个QDatabase表示一个数据库连接。在底层Qt使用不同的驱动程序来与不同的数据库API进行交互。
通常Qt只默认搭载了QSqlLite驱动程序如果需要使用其他数据库需要下载相应的数据库驱动如mysql的为 qsqlmysql.dll同时还需要mysql的客户端库libmysql.dll。
在连接数据库之前可以使用QSqlDatabase::drivers()查看本机Qt已经支持的数据库驱动。
环境准备
1.安装MySQL数据库首先确保你的系统中安装了MySQL服务器并创建好数据库和表结构。
2.安装Qt开发环境安装Qt Creator及Qt库确保包含SQL驱动模块。
注意Qt默认并不包括MySQL驱动需要手动构建。在QT安装目录如Qt5.12.11\5.12.11\msvc2015_64\plugins\sqldrivers里找是否有qsqlmysql.dll和qsqlmysqld.dll.
如果没有则需要基于QT源码从新构建构建好后把qsqlmysql.dll放入plugins\sqldrivers目录中。如果不存在该库则程序执行会报QSqlDatabase: QMYSQL driver not loaded的错误。
如果要构建QMYSQL需安装Qt源代码并确保你的系统中安装了MySQL服务器或至少安装了MySQL Connector/C因为构建过程需要MySQL的头文件和库文件。
可以通过以下方式查看支持哪些驱动 qDebug()support drivers:QSqlDatabase::drivers(); 3.安装MySQL的c/c的ConnectorMySQL客户端库对于Qt 5.12及以上版本MySQL驱动可能已内置但若缺失需下载MySQL Connector/C并安装确保Qt能找到libmysql动态库。(libmysql.dll动态库。链接MySQL :: Download MySQL Connector/C (Archived Versions)) 将压缩包解压将lib文件夹下的libmysql.dll和libmysql.lib文件拷贝到Qt的安装目录的bin文件夹下即可。
项目配置
在你的Qt项目文件.pro中添加如下行以启用SQL模块
QT sql
简单使用
编写代码连接数据库
#include QSqlDatabase
#include QSqlQuery
#include QSqlError
#include QDebugvoid connectToDatabase() {QSqlDatabase db QSqlDatabase::addDatabase(QMYSQL);db.setHostName(localhost);db.setDatabaseName(testdb);db.setUserName(root);db.setPassword(password);if (!db.open()) {qDebug() Failed to connect to database: db.lastError().text();} else {qDebug() Connected to database!;}
} 简单示例
#include QCoreApplication
#include QSqlDatabase
#include QSqlQuery
#include QSqlError
#include QDebugvoid connectToDatabase() {QSqlDatabase db QSqlDatabase::addDatabase(QMYSQL);db.setHostName(localhost);db.setDatabaseName(testdb);db.setUserName(root);db.setPassword(password);if (!db.open()) {qDebug() Failed to connect to database: db.lastError().text();} else {qDebug() Connected to database!;}
}bool createTable() {QSqlQuery query;bool success query.exec(CREATE TABLE person (id INT PRIMARY KEY, name VARCHAR(40)));if (!success) {qDebug() Failed to create table: query.lastError().text();}return success;
}bool insertRecord(int id, const QString name) {QSqlQuery query;query.prepare(INSERT INTO person (id, name) VALUES (:id, :name));query.bindValue(:id, id);query.bindValue(:name, name);bool success query.exec();if (!success) {qDebug() Failed to insert record: query.lastError().text();}return success;
}void queryRecords() {QSqlQuery query(SELECT id, name FROM person);while (query.next()) {int id query.value(0).toInt();QString name query.value(1).toString();qDebug() id name;}
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);connectToDatabase();createTable();insertRecord(1, Alice);insertRecord(2, Bob);queryRecords();return a.exec();
}
模块类封装
直接使用不太好用这里做一个模块类封装变得更好用啦接口变得简单清晰。如果不封装则原始是使用大概如下 QSqlQuery query(QSqlDatabase::database(connectionName, true));query.prepare(insert into test(name,age) values(:nameL,:ageL));QStringList namelist;namelistTtPpKk;query.bindValue(:nameL,namelist);QVariantList agelist;agelist405060;query.bindValue(:ageL,agelist);if(!query.execBatch()){qDebug()数据插入失败 query.lastError().text();}else{qDebug()数据插入成功;}可以看到使用比较繁琐封装后的模块代码如下
#include mysqldb.h
#include QDebug
#include QUuidmysqlDb::mysqlDb() {qDebug()support drivers:QSqlDatabase::drivers();
}mysqlDb::~mysqlDb() {disConnectSql();
}//打开连接
bool mysqlDb::connectSql(const QString dbName) {mdbName_ dbName;db QSqlDatabase::database(connectionName);if(!db.isValid()) {QUuid qUuid QUuid::createUuid();QString strUuid qUuid.toString();connectionName QString(mysql-%1).arg(strUuid);db QSqlDatabase::addDatabase(QMYSQL,connectionName);db.setHostName(mhost_); //根据实际情况设置主机名db.setPort(mport_);db.setDatabaseName(dbName);db.setUserName(muser_); //根据实际情况设置用户名db.setPassword(mpwd_); //根据实际情况设置密码db.setConnectOptions(MYSQL_OPT_RECONNECT1); // 支持断线重连if (!db.open()) {qWarning(Failed to open database: %s, qPrintable(db.lastError().text()));return false;}}return true;
}
//打开连接
bool mysqlDb::connectSql(const QString host, int port, const QString dbName, const QString userName, const QString password) {mhost_ host;mport_ port;mdbName_ dbName;muser_ userName;mpwd_ password;db QSqlDatabase::database(connectionName);if(!db.isValid()) {QUuid qUuid QUuid::createUuid();QString strUuid qUuid.toString();connectionName QString(mysql-%1).arg(strUuid);db QSqlDatabase::addDatabase(QMYSQL,connectionName);db.setHostName(host); //根据实际情况设置主机名db.setPort(port);db.setDatabaseName(dbName);db.setUserName(userName); //根据实际情况设置用户名db.setPassword(password); //根据实际情况设置密码db.setConnectOptions(MYSQL_OPT_RECONNECT1); // 支持断线重连if (!db.open()) {qWarning(Failed to open database: %s, qPrintable(db.lastError().text()));return false;}}return true;
}//关闭连接
bool mysqlDb::disConnectSql() {db QSqlDatabase::database(connectionName);if(!db.isValid()) {return true;}db.close();QSqlDatabase::removeDatabase(connectionName);connectionName ;return true;
}//错误打印
void mysqlDb::errorSql(QString sql) {errorSqlText sql;qCritical(%s, qPrintable(errorSqlText));
}//获取错误的数据库语句
QString mysqlDb::getErrorSql() {if(connectionName.isEmpty()) {return db not setting;}return errorSqlText;
}void mysqlDb::setMdbName(const QString mdbName)
{mdbName_ mdbName;
}void mysqlDb::setMpwd(const QString mpwd)
{mpwd_ mpwd;
}void mysqlDb::setMuser(const QString muser)
{muser_ muser;
}void mysqlDb::setMhost(const QString mhost)
{mhost_ mhost;
}void mysqlDb::setMport(int mport)
{mport_ mport;
}//执行sql语句不获取结果
bool mysqlDb::queryExec( QString queryStr) {if(connectionName.isEmpty()) {if(!connectSql(mhost_,mport_,mdbName_,muser_,mpwd_)) {return false;}}QSqlQuery query(QSqlDatabase::database(connectionName, true));if(!query.exec(queryStr)) {errorSql(queryStr);return false;}return true;
}//执行sql语句并获取结果
bool mysqlDb::queryExec( QString queryStr, QListQHashQString, QString data) {data.clear();if(connectionName.isEmpty()) {if(!connectSql(mhost_,mport_,mdbName_,muser_,mpwd_)) {return false;}}QSqlQuery query(QSqlDatabase::database(connectionName, true));if(!query.exec(queryStr)) {errorSql(queryStr);return false;}QSqlRecord rec query.record();while(query.next()) {QHashQString, QString rowData;for(int i 0; i rec.count(); i) {QVariant::Type ty query.value(i).type();if(QVariant::Type::Date ty) {QDate temp query.value(i).toDate();rowData[rec.fieldName(i)] temp.toString(yyyy-MM-dd);} else if(QVariant::Type::Time ty) {QTime temp query.value(i).toTime();rowData[rec.fieldName(i)] temp.toString(hh:mm:ss);} else if(QVariant::Type::DateTime ty) {QDateTime temp query.value(i).toDateTime();rowData[rec.fieldName(i)] temp.toString(yyyy-MM-dd hh:mm:ss);} else {rowData[rec.fieldName(i)] query.value(i).toString();}}data.append(rowData);}return true;
}//获取数据
bool mysqlDb::getData(QString tableName, QHashQString, QString data, QString sqlWhere) {data.clear();QListQHashQString, QString dataList;if(!getData(tableName, dataList, sqlWhere)) {return false;}if(dataList.count() 0) {data dataList[0];}return true;
}//获取数据
bool mysqlDb::getData( QString tableName, QListQHashQString, QString data, QString sqlWhere) {QString queryStr select * from tableName;if(!sqlWhere.isEmpty()) {queryStr sqlWhere;}return queryExec(queryStr, data);
}//获取数据
bool mysqlDb::getData(QString tableName, QHashQString, QString columndata, QListQHashQString, QString data, QString sqlWhere) {QString colunmStr;if(columndata.count() 0) {colunmStr *;} else {QStringList keys columndata.keys();for(auto key : keys) {QString column QString(%1 AS %2).arg(key).arg(columndata[key]);if(!colunmStr.isEmpty()) {colunmStr ,;}colunmStr column;}}QString queryStr QString(SELECT %1 FROM %2 %3).arg(colunmStr).arg(tableName).arg(sqlWhere);return queryExec(queryStr, data);
}//增加
bool mysqlDb::addData(QString tableName, QHashQString, QString data) {if(data.isEmpty()) {return false;}QString queryStr INSERT INTO tableName ;QString fieldStr (, valueStr VALUES(;QHashQString, QString::iterator it;for(it data.begin(); it ! data.end(); it) {fieldStr it.key() ,;valueStr it.value() ,;}fieldStr fieldStr.left(fieldStr.length() - 1);valueStr valueStr.left(valueStr.length() - 1);fieldStr );valueStr );queryStr fieldStr valueStr;return queryExec(queryStr);
}//删除
bool mysqlDb::delData(QString tableName, QString sqlWhere) {QString queryStr DELETE FROM tableName;if(!sqlWhere.isEmpty()) {queryStr sqlWhere;}return queryExec(queryStr);
}//修改
bool mysqlDb::updateData( QString tableName, QHashQString, QString data, QString sqlWhere) {QString queryStr UPDATE tableName ;QHashQString, QString::iterator it;QString setStr SET ;for(it data.begin(); it ! data.end(); it) {setStr it.key() it.value() ;setStr ,;}setStr setStr.left(setStr.length() - 1);queryStr setStr;if(!sqlWhere.isEmpty()) {queryStr sqlWhere;}return queryExec(queryStr);
}bool mysqlDb::transaction() {if(connectionName.isEmpty()) {return false;}return db.transaction();
}bool mysqlDb::commit() {if(connectionName.isEmpty()) {return false;}return db.commit();
}#ifndef MYSQLDB_H
#define MYSQLDB_H#include QDir
#include QDate
#include QDateTime
#include QFileInfo
#include QString
#include QTime
#include QSqlDatabase
#include QSqlRecord
#include QSqlQuery
#include QSqlError
#include QVariantclass mysqlDb
{
public:mysqlDb();~mysqlDb();
public:bool connectSql(const QString dbName);//打开连接bool connectSql(const QString host, int port, const QString dbName, const QString userName, const QString password);//打开连接bool disConnectSql();//关闭连接bool queryExec(QString sqlStr);//执行sql语句不获取结果bool queryExec(QString sqlStr,QListQHashQString,QString data);//执行sql语句并获取结果bool getData(QString tableName,QHashQString,QString data,QString sqlWhere); //获取数据bool getData(QString table,QListQHashQString,QString data,QString sqlWhere); //获取数据bool getData(QString tableName,QHashQString,QString columndata,QListQHashQString,QString data,QString sqlWhere); //获取数据bool addData(QString tableName,QHashQString,QString data);//增加bool delData(QString tableName,QString sqlWhere);//删除bool updateData(QString tableName,QHashQString,QString data,QString sqlWhere);//修改bool transaction();bool commit();QString getErrorSql();//获取错误的数据库语句void setMhost(const QString mhost);void setMport(int mport);void setMdbName(const QString mdbName);void setMuser(const QString muser);void setMpwd(const QString mpwd);private:QSqlDatabase db;QString connectionName;QString errorSqlText;//错误语句QString mdbName_;QString mhost_ localhost;int mport_ 3306;QString muser_;QString mpwd_;private:void errorSql(QString sql);//错误打印
};#endif // MYSQLDB_H 如何使用
void MainWindow::on_btn_test_clicked()
{mysqlDb* db new mysqlDb();db-setMhost(111.178.126.10);db-setMuser(xxxxxx);db-setMpwd(xxxxxx);bool ret db-openSql(test);if(ret){qDebug(connect ok);//插入数据QHashQString, QString user;user.insert(name,yang);user.insert(age,30);ret db-addData(user,user);if(ret){qDebug(insert ok);}else{qDebug(insert error);}//读取数据QListQHashQString, QString data;ret db-getData(user,data,);if(ret){qDebug(get ok);for(auto d:data){qDebug(d[user].toStdString().c_str());qDebug(d[age].toStdString().c_str());}}else{qDebug(get error);}//更新QHashQString, QString update;update.insert(age,35);ret db-updateData(user,update,where age 30);if(ret){qDebug(updateData ok);}else{qDebug(updateData error);}//删除ret db-delData(user,where age 32);if(ret){qDebug(delete ok);}else{qDebug(delete error);}}else{qDebug(connect error);}
}
附qsqlmysql库的构建
如果已经有该库以下步骤可忽略。该库位置在Qt5.xx\5.xx\msvc20xx_\plugins\sqldrivers
qsqlmysql库是Qt框架中用于连接MySQL数据库的一个插件库。它是Qt SQL模块的一部分专门设计用于提供对MySQL数据库的支持。
前提条件
安装Qt确保你已经安装了Qt和Qt Creator。安装MySQL客户端库 Windows环境下可以直接下载 MySQL C API 开发包 (MySQL Connector/C)。Linux环境可通过包管理器安装例如 sudo apt-get install libmysqlclient-dev。macOS环境可通过Homebrew安装例如 brew install mysql-client。下载QT相应版本的源码比如我的是Qt5.14.2。下载地址https://download.qt.io/
构建步骤
1. 查找Qt的安装路径和编译器
确认你的Qt安装路径。例如C:\Qt\5.x.x\mingwxx_32确认你使用的编译器如 MinGW 或 MSVC以及其路径。QT的源码不用全解压只需要qtbase这个文件夹下的全部内容。
2. 设置环境变量
将Qt的编译工具如qmake添加到系统的PATH变量中。
3. 获取MySQL开发库
确保你已经下载并解压了 MySQL Connector/C 用于 Windows 系统在Linux和macOS系统上安装相应的开发库会自动设置好的路径。
4. 构建 qsqlmysql 插件
使用Qtcreator打开D:\Qt\qtbase\src\plugins\sqldrivers\mysql\mysql.pro工程文件。 打开工程后会报错Cannot read qtsqldrivers-config.pri: No such file or directory
接下来需要对mysql.pro文件和它上一级的qsqldriverbase.pri文件做出修改
修改qsqldriverbase.pri
QT core core-private sql-private# For QMAKE_USE in the parent projects.
#注释到这个
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
#新增加这个
include(./configure.pri)PLUGIN_TYPE sqldrivers
load(qt_plugin)DEFINES QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII修改 mysql.pro TARGET qsqlmysqlHEADERS $$PWD/qsql_mysql_p.h
SOURCES $$PWD/qsql_mysql.cpp $$PWD/main.cpp#注释到这个
#QMAKE_USE mysqlOTHER_FILES mysql.jsonPLUGIN_CLASS_NAME QMYSQLDriverPlugin
#以下为新增
#!!mysql的lib路径
LIBS D:\Qt\mysql-connector-c-6.1.11-winx64/lib/libmysql.lib
#!!mysql的include路径
INCLUDEPATH $$quote(D:\Qt\mysql-connector-c-6.1.11-winx64/include)
#!!mysql的include路径
DEPENDPATH $$quote(D:\Qt\mysql-connector-c-6.1.11-winx64/include)include(../qsqldriverbase.pri)#!!设置编译好的qmysql.dll放置的目录
DESTDIR ../mysql/mysqlDll
5. 将编译好的插件拷贝到合适的位置
将编译得到的 qsqlmysql.dll或 libqsqlmysql.so 或 libqsqlmysql.dylib放到Qt的插件目录下。例如 C:\Qt\5.x.x\mingwxx_64\plugins\sqldriversWindows或 /path/to/qt/plugins/sqldriversLinux和macOS。
注意事项
版本匹配请确保你的 MySQL 客户端库版本与 MySQL 服务器版本兼容同时确保与 Qt 使用的编译器版本一致。路径问题在运行示例程序时所有路径要使用绝对路径或将相关路径加入到环境变量中以确保 Qt 能够找到相应的库文件。权限问题在Linux和macOS环境下可能需要使用sudo来执行某些命令以拥有足够的权限。
按照上述步骤你应该能够成功构建并使用 qsqlmysql 插件来连接 MySQL 数据库。
最后附上编译好的mysql驱动含windows和mac版本的5.14.25.15.26.5.3
链接如下
https://pan.baidu.com/s/1m15DbFuFTtXfEyqyOS2cew
提取码: 2o2s
其他资源
https://www.cnblogs.com/zhuchunlin/p/16485933.html
QT连接MYSQL保姆级成功案例_qt mysql-CSDN博客
QT学习之路——Qt QMySQL driver not loaded问题笔记_qsqldatabase: qmysql driver not loaded qsqldatabas-CSDN博客
MySQL :: Download MySQL Connector/C (Archived Versions)
QT加载mysql失败重新构建mysql源文件_qt重新加载资源文件-CSDN博客
QT操作Mysql数据库_qt mysql-CSDN博客
https://www.cnblogs.com/flygreen/p/18029637
Qt连接mysql数据库_不能找到qtsqldrivers-config.pri-CSDN博客
Linux下Qt 5.15.2源码下载及编译_qt5 linux 源码下载-CSDN博客
qt creator mysql_qt creator with mysql-CSDN博客
编译qt5.15.2mac/windows的mysql驱动附带编译好的文件_macos编译qt5.15.2-CSDN博客 文章转载自: http://www.morning.rhpy.cn.gov.cn.rhpy.cn http://www.morning.tbhlc.cn.gov.cn.tbhlc.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.kjmcq.cn.gov.cn.kjmcq.cn http://www.morning.wqgr.cn.gov.cn.wqgr.cn http://www.morning.srgyj.cn.gov.cn.srgyj.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.qbnfc.cn.gov.cn.qbnfc.cn http://www.morning.pwggd.cn.gov.cn.pwggd.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.tgqzp.cn.gov.cn.tgqzp.cn http://www.morning.xflzm.cn.gov.cn.xflzm.cn http://www.morning.bbjw.cn.gov.cn.bbjw.cn http://www.morning.hmhdn.cn.gov.cn.hmhdn.cn http://www.morning.npfrj.cn.gov.cn.npfrj.cn http://www.morning.hmmtx.cn.gov.cn.hmmtx.cn http://www.morning.pcbfl.cn.gov.cn.pcbfl.cn http://www.morning.zqfz.cn.gov.cn.zqfz.cn http://www.morning.kqglp.cn.gov.cn.kqglp.cn http://www.morning.mrlls.cn.gov.cn.mrlls.cn http://www.morning.jfwbr.cn.gov.cn.jfwbr.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.jxfsm.cn.gov.cn.jxfsm.cn http://www.morning.fbzdn.cn.gov.cn.fbzdn.cn http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn http://www.morning.rcjyc.cn.gov.cn.rcjyc.cn http://www.morning.ngkng.cn.gov.cn.ngkng.cn http://www.morning.lssfd.cn.gov.cn.lssfd.cn http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com http://www.morning.ngqty.cn.gov.cn.ngqty.cn http://www.morning.wqrdx.cn.gov.cn.wqrdx.cn http://www.morning.gqhgl.cn.gov.cn.gqhgl.cn http://www.morning.fypgl.cn.gov.cn.fypgl.cn http://www.morning.hnkkf.cn.gov.cn.hnkkf.cn http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn http://www.morning.hfytgp.cn.gov.cn.hfytgp.cn http://www.morning.kxmyj.cn.gov.cn.kxmyj.cn http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.ssfq.cn.gov.cn.ssfq.cn http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.kxyqy.cn.gov.cn.kxyqy.cn http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn http://www.morning.mpgfk.cn.gov.cn.mpgfk.cn http://www.morning.mldrd.cn.gov.cn.mldrd.cn http://www.morning.kgnrh.cn.gov.cn.kgnrh.cn http://www.morning.juju8.cn.gov.cn.juju8.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.yrnll.cn.gov.cn.yrnll.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.ggnkt.cn.gov.cn.ggnkt.cn http://www.morning.ztcxx.com.gov.cn.ztcxx.com http://www.morning.jhxtm.cn.gov.cn.jhxtm.cn http://www.morning.hphfy.cn.gov.cn.hphfy.cn http://www.morning.nyzmm.cn.gov.cn.nyzmm.cn http://www.morning.cfocyfa.cn.gov.cn.cfocyfa.cn http://www.morning.gcszn.cn.gov.cn.gcszn.cn http://www.morning.pumali.com.gov.cn.pumali.com http://www.morning.mpngp.cn.gov.cn.mpngp.cn http://www.morning.tnjkg.cn.gov.cn.tnjkg.cn http://www.morning.skmzm.cn.gov.cn.skmzm.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.jtqxs.cn.gov.cn.jtqxs.cn http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.zdxss.cn.gov.cn.zdxss.cn http://www.morning.zsleyuan.cn.gov.cn.zsleyuan.cn http://www.morning.knwry.cn.gov.cn.knwry.cn http://www.morning.ksggr.cn.gov.cn.ksggr.cn http://www.morning.amlutsp.cn.gov.cn.amlutsp.cn http://www.morning.zljqb.cn.gov.cn.zljqb.cn http://www.morning.rfljb.cn.gov.cn.rfljb.cn http://www.morning.ccdyc.cn.gov.cn.ccdyc.cn http://www.morning.xfjwm.cn.gov.cn.xfjwm.cn http://www.morning.xknsn.cn.gov.cn.xknsn.cn http://www.morning.wkjzt.cn.gov.cn.wkjzt.cn http://www.morning.mhxlb.cn.gov.cn.mhxlb.cn http://www.morning.dpbdq.cn.gov.cn.dpbdq.cn http://www.morning.kltmt.cn.gov.cn.kltmt.cn http://www.morning.rsfp.cn.gov.cn.rsfp.cn http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn