• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    4年前 (2014-12-29)  Linux |   抢沙发  28 
    文章评分 0 次,平均分 0.0

    最近的项目想在Linux下来做,但是数据库这块有一些问题,浪费了好几个小时,记录在此备忘一下。

      1.QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
      提示驱动没有加载,应该是链接库出问题,进入Qt的数据库插件目录

      cd /usr/local/Qt5.2.1/5.2.1/gcc/plugins/sqldrivers/

      查看当前Qt处理mysql的动态链接库依赖的动态连接库
      [sjell]ldd libqsqlmysql.so [/shell]
      会发现如下的信息,你会发现有一行结尾是 “not found”

             linux-vdso.so.1 =>  (0x00007fff457d9000)
              libmysqlclient_r.so.16 => not found
      	linux-gate.so.1 =>  (0xb771f000)
      	libQt5Sql.so.5 => /usr/local/Qt5.2.1/5.2.1/gcc/lib/libQt5Sql.so.5 (0xb76cc000)
      	libQt5Core.so.5 => /usr/local/Qt5.2.1/5.2.1/gcc/lib/libQt5Core.so.5 (0xb6ebe000)
      	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6dd5000)
      	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6c26000)
      	libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6c0c000)
      	libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb6c06000)
      	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb6bea000)
      	libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6ba4000)
      	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6b87000)
      	libicui18n.so.51 => /usr/local/Qt5.2.1/5.2.1/gcc/lib/libicui18n.so.51 (0xb6965000)
      	libicuuc.so.51 => /usr/local/Qt5.2.1/5.2.1/gcc/lib/libicuuc.so.51 (0xb67eb000)
      	libgthread-2.0.so.0 => /usr/lib/i386-linux-gnu/libgthread-2.0.so.0 (0xb67e8000)
      	librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb67df000)
      	libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xb66d3000)
      	/lib/ld-linux.so.2 (0xb7720000)
      	libicudata.so.51 => /usr/local/Qt5.2.1/5.2.1/gcc/lib/libicudata.so.51 (0xb518a000)
      	libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb514b000)
      

      找到qt中数据库的源代码目录,我的在
      /usr/local/share/qt-everywhere-opensource-src-5.2.1/qtbase/src/plugins/sqldrivers/mysql

      qmake && make 

      会生成几个文件,拷贝到/usr/local/Qt5.2.1/5.2.1/gcc/plugins/sqldrivers/后再ldd发现已经没有上面的问题。

    • 2.数据库不能连接
    • 我采用如下的代码来测试数据库联通性,一方面可以测试联通与否,还可以打印出错原因。

      #include <QCoreApplication>
      #include <QtSql>
      
      int main(int argc, char *argv[])
      {
          QCoreApplication a(argc, argv);
          QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
          db.setHostName("localhost");
          db.setDatabaseName("mysql");
          db.setUserName("root");
          db.setPassword("1234");
      	qDebug() << "Available drivers:";
      	QStringList drivers = QSqlDatabase::drivers();
      	 foreach(QString driver, drivers) qDebug() << "\t" << driver;
          bool ok = db.open();
          qDebug() << ok<<endl;
      	qDebug()<<db.lastError()<<endl;
          db.close();
          return a.exec();
      }
      

      但是出现以下原因:

      QSqlError(2002, "QMYSQL: Unable to connect", "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'(2)") 

      使用

      ps -aux | grep mysql

      找到mysql然后kill掉。我是采用这种方法解决Can't connect to local MySQL server through socket '/tmp/mysql.sock'错误。

    • 3.环境变量设置
    • 需要正确的设置环境变量,我的环境变量如下:
      profile.tar

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/3898.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享