ARM上面遠端存取Mysql資料庫(轉載)

來源:互聯網
上載者:User

標籤:

在PC上使用MYSQL非常正常,但是移植到ARM開發板上就總是提示不能Load Mysql的驅動。無論我把庫檔案放在那裡,都無法使用。找資料的時候,無意中發現了一篇文章,終於可以在QT上使用MYsql了。

1.準備Mysql驅動源碼。我已經抽取出來了。下載檔案:MySQL-source.rar
解壓後一共有9個檔案。
   my_alloc.h  mysql_com.h  mysql_version.h  qsql_mysql.h my_list.h   mysql.h      mysql_time.h     qsql_mysql.cpp   typelib.h
   把這9個檔案複製到工程目錄,還有加入工程。
2.下載mysql的庫檔案。
   ARM版:mysql-lib-arm.rar
   PC版:mysql-lib-pc.rar
   解壓後分別有一個檔案夾。然後把兩個檔案夾的路徑放到/usr/local/mysql目錄下。
3.加到環境變數$LD_LIBRARY_PATH中。ARM版本的除了在PC上編譯用,也要下載到開發板上啟動並執行時候用。開發板上同樣要把路徑加入$LD_LIBRARY_PATH

(1)在Ubuntu終端運行env,發現並沒有LD_LIBRARY_PATH這個環境變數(2)新開啟一個終端,輸入命令echo $LD_LIBRARY_PATH,結果為空白。
(3)通過export添加目錄,在終端輸入命令,如果編PC版程式就用添加目錄:export LD_LIBRARY_PATH= /usr/local/mysql/mysql-lib-pc,如果編譯ARM板的把目錄最後改為mysql-lib-arm
       關閉該終端,開啟一個新的終端,輸入echo $LD_LIBRARY_PATH命令,則顯示為空白。說明用shell指令添加目錄在關閉終端後就沒有了。
(4)也可以編輯~/.profile檔案,新增內容:  
       if [ -d "$HOME/lib"] ; then  
       export LD_LIBRARY_PATH="/usr/local/mysql/mysql-lib-pc"  
      fi  
     當使用Ctrl+Alt+F1登入進去tty1時,使用echo $LD_LIBRARY_PATH可以看到置的環境變數。  
     但是在終端,輸入echo命令,仍然為空白。環境變數設定沒有效果。

(5) 如果不想每次新啟一個shell都設定LD_LIBRARY_PATH,可以編輯~/.bash_profile檔案:

     $ vi ~/.bash_profile

    添加:
    LD_LIBRARY_PATH=/usr/local/mysql/mysql-lib-pc
    export LD_LIBRARY_PATH
    這兩行,完成之後.bash_profile如下所示:
    # .bash_profile
    # Get the aliases and functions
     if [ -f ~/.bashrc ]; then
       . ~/.bashrc
      fi
    # User specific environment and startup programs
        PATH=$PATH:$HOME/bin
        LD_LIBRARY_PATH=/usr/local/mysql/mysql-lib-pc
       export PATH
       export LD_LIBRARY_PATH
       然後運行
      $ source ~/.bash_profile 就行了。
4.然後回到工程檔案裡面。
      修改工程檔案 (.pro檔案)最後加入一句 LIBS += -L/usr/local/mysql/mysql-lib-pc -lmysqlclient  
      其中紅色部分是你剛剛解壓的庫檔案路徑。如果編譯PC版就寫PC版本的路徑,編譯ARM就寫ARM版本的路徑。
5.準備工作都完成了,之後就可以寫程式了。和一般情況下串連Mysql差不多。在串連Mysql處的代碼,現在是這樣子的。
加入 #include "qsql_mysql.h"


   MYSQL *conR=mysql_init(NULL);
   mysql_real_connect(conR,NULL,NULL,NULL,NULL,0,NULL,0);
   QMYSQLDriver *drvR =  new QMYSQLDriver(conR);
   QSqlDatabase db=QSqlDatabase::addDatabase(drvR);
   db.setHostName("192.168.0.210");
   db.setDatabaseName("test");
   db.setUserName("root");
   db.setPassword("");
   if(!db.open())
  {
        qDebug()<<"error";
        exit(1);
  }
  else
      qDebug()<<"OK";
6.在PC上編譯器,可能會出現問題,需要自己加上#include 標頭檔,而在編譯ARM板程式時,又會出現問題,說幾個函數沒有聲明。
  qsql_mysql.cpp 1417行:函數numericalPrecisionPolicy()沒有聲明:
 我直接把程式屏蔽了,因為我不需要使用它提供的查詢功能:
 /*switch(numericalPrecisionPolicy()) {
            case QSql::LowPrecisionInt32:
                v=QVariant(dbl).toInt();
                break;
            case QSql::LowPrecisionInt64:
                v = QVariant(dbl).toLongLong();
                break;
            case QSql::LowPrecisionDouble:
                v = QVariant(dbl);
                break;
            case QSql::HighPrecision:
            default:
                v = val;
                ok = true;
                break;
        }*/
還有一個是:qsql_mysql.cpp 1417行:
 /*if(isIdentifierEscaped(table, QSqlDriver::TableName))
        table = stripDelimiters(table, QSqlDriver::TableName);*/
7.最後,所有問題解決,程式就可以運行了,親測可用。

 

8.編譯的時候可能找不到庫檔案,在相應檔案夾下建立軟串連。

ARM上面遠端存取Mysql資料庫(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.