前段时间在写一个Qt小程序的时候有用到数据库,Qt与数据库的连接真的搞得我很头疼,一开始一直使用驱动连接,不是提示 ”没有驱动程序“ 就是提示 “找不到SSL” 。在网上搜来搜去最后终于找到了解决方案,使用ODBC来进行连接,因为大多数的Qt和我一样都是32位的,而下载的Mysql是64位的,因此使用其他方法比较繁琐而且最终没能解决问题。
首先应该安装Mysql,没有安装的可以按照下面这位老哥的进行安装,我就是看的他的
MySQL的详细安装教程 - 知乎 (zhihu.com)MySQL的详细安装教程 - 知乎 (zhihu.com)
之后需要下载OBDC连接Mysql
我们可以通过自己Qt的安装位置来进行查看自己Qt的位数,或者说打开Qt之后通过任务管理器来获取自己下载的Qt的位数,来进行安装相应位数的ODBC程序
安装过程一路next就可以,安装好之后搜索ODBC打开DataSources32位(因为有的小伙伴可能也安装了64位的) ;
之后点击添加,选择ODBC8.0驱动;
紧接着的新建连接页面,绿色框框的随便填写就可以,红色框框的填写自己的Mysql 用户名称和登录密码,以及要使用的数据库的名称;
完成之后点击粉色框框的test来测试是否能够链接到自己电脑的Mysql上,如果成功的话将会显示connection success。
如果提示失败的话可能因为Mysql没有打开,右击左下脚windows按钮打开命令行
打开mysql的命令式 net start mysql;
关闭mysql命令: net stop mysql;
对于Mysql上的一些操作可以参考下面CSDN老哥的文章,非常详细:
完成以上步骤后说明已经可以通过ODBC连接到本地的数据库了,然后进行Qt与ODBC的连接就可以了。
首先应该在.pro文件中加入:
QT += sql
并且在连接数据库的文件中包含以下库:#include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery>
然后就可以使用以下代码进行连接了,我是将间接的代码放在MainWindow中,然后将db声明为全局变量即可在其他文件中对于我的数据库进行访问了
void MainWindow::ConnectToMysql(){ QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setHostName("127.0.0.1"); db.setPort(3306); db.setDatabaseName("zz_singlecard"); db.setUserName("root"); bool getInput=false; QString passwd=QInputDialog::getText(this,"PassWord","Please Inputt Your PassWord",QLineEdit::Normal,"passwd",&getInput); db.setPassword(passwd); bool ok = db.open(); if (ok){ QMessageBox::information(this, "infor", "success"); } else { QMessageBox::information(this, "infor", "failed"); qDebug()<<"Error because:"<<db.lastError().text(); } }
Qt中数据库的增删改查相关操作:
bool File::insert(const QString &value){ QSqlQuery result; QString query="insert into students values("+value+",'正常');"; bool ok=result.exec(query); return ok; }//插入新行 bool File::fileDestory(const QString &UID){ QSqlQuery result; bool ok=result.exec("delete from students where id="+UID+";"); return ok; }//删除 bool File::alter(const QString &id,const QString &value){ QSqlQuery result; QString query="update students set money="+value+" where(id="+id+");"; qDebug()<<query; bool ok=result.exec(query); return ok; }//修改 bool File::select(const QString &UID,QStringList &list){ QString query="select * from students where(id="+UID+");"; QSqlQuery result=db.exec(query); while(result.next()){ list<<result.value("id").toString(); list<<result.value("number").toString(); list<<result.value("name").toString(); list<<result.value("money").toString(); list<<result.value("sex").toString(); list<<result.value("age").toString(); list<<result.value("status").toString(); } return list.size(); }//查询