作者 主題: C++讀取Mysql  (閱讀 10210 次)

0 會員 與 1 訪客 正在閱讀本文。

augsys

  • 憂鬱的高中生
  • ***
  • 文章數: 185
    • 檢視個人資料
C++讀取Mysql
« 於: 2005-09-08 02:11 »
請教一下Linux中用C程式語言去讀Mysql,是先給username, password,連線到Mysql,之後要讀取Mysql的資料是否每次都要給username, password,才能再讀取下一筆資料?或是只要連線一次之後就可以任意讀取直到disconnect?
不知那邊有個範例可参考?
謝謝.

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
Re: C讀取Mysql
« 回覆 #1 於: 2005-09-08 02:57 »
引述: "augsys"
請教一下Linux中用C程式語言去讀Mysql,是先給username, password,連線到Mysql,之後要讀取Mysql的資料是否每次都要給username, password,才能再讀取下一筆資料?或是只要連線一次之後就可以任意讀取直到disconnect?不知那邊有個範例可参考?
謝謝.


除非你 disconnect,或者是 timeout 被斷線,要不然都可以持續連線存取。

文件請參閱:

http://dev.mysql.com/doc/mysql/en/index.html

http://dev.mysql.com/doc/mysql/en/c.html

需要範例這邊有:

http://www.geocities.com/jahan.geo/mysql_c_by_example.html

(by google)
==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

augsys

  • 憂鬱的高中生
  • ***
  • 文章數: 185
    • 檢視個人資料
C++讀取Mysql
« 回覆 #2 於: 2005-09-08 03:18 »
3Q kenduest學長,來去看一下.

augsys

  • 憂鬱的高中生
  • ***
  • 文章數: 185
    • 檢視個人資料
C++讀取Mysql
« 回覆 #3 於: 2005-09-15 02:44 »
請問Linux Fedora3中要安裝哪些套件及什麼版本才能正常compiler底下範例?要執行C++連Mysql,那邊有範例呢?

#include <iostream>
#include <mysql++.h>
int main()
{
   try {
      Connection con("sample");
      Result res = con.store("SELECT * FROM customer");
      cout << res.size() << " records found" << endl;
      Result::iterator r;
      for(r = res.begin(); r != res.end(); r++) {
         const Row &row = *r;
         for(int c = 0; c < row.size(); c++)
            cout << row[c] << " ";
         cout << endl;
      }
   }
   catch (BadQuery &er) {
      cerr << "Oops: " << er.error << endl;
   }
   catch (BadConversion &er) {
      cerr << "Oops: converting [" << er.data << "] to "
      << er.type_name << endl;
   }
   catch (BadNullConversion) {
      cerr << "Oops: bad NULL conversion" << endl;
   }
}

是已經裝了以下套件,但是會有Include err,這Client端是沒裝MySQL,是否還要安裝MySQL 3.23? 或其它套件?


> rpm -ivh MySQL-shared-3.23.57-1.i386.rpm
Preparing...                ##################################################
MySQL-shared                ##################################################
> rpm -ivh libstdc++34-3.4.0-1.i386.rpm
warning: libstdc++34-3.4.0-1.i386.rpm: V3 DSA signature: NOKEY, key ID 4f2a6fd2
Preparing...                ##################################################
libstdc++34                 ##################################################
> rpm -ivh mysql++-2.0.5-1.el4.i386.rpm
Preparing...                ##################################################
mysql++                     ##################################################
> rpm -ivh mysql++-devel-2.0.5-1.el4.i386.rpm
Preparing...                ##################################################
mysql++-devel               ##################################################



err:
g++ selectcc.cc -o cc.o -I/usr/include/mysql++ -L/usr/lib -lMySQLclient

In file included from /usr/include/mysql++/connection.h:40,
                 from /usr/include/mysql++/mysql++.h:54,
                 from selectcc.cc:2:
/usr/include/mysql++/defs.h:34:19: mysql.h: No such file or directory
In file included from /usr/include/mysql++/connection.h:40,
                 from /usr/include/mysql++/mysql++.h:54,
                 from selectcc.cc:2:
/usr/include/mysql++/defs.h:66: error: syntax error before `;' token
In file included from /usr/include/mysql++/mysql++.h:54,
                 from selectcc.cc:2:
/usr/include/mysql++/connection.h:45:19: mysql.h: No such file or directory
In file included from /usr/include/mysql++/mysql++.h:54,
                 from selectcc.cc:2:
/usr/include/mysql++/connection.h:142: error: type specifier omitted for
   parameter `my_bool'
/usr/include/mysql++/connection.h:142: error: syntax error before `=' token
/usr/include/mysql++/connection.h:159: error: type specifier omitted for
   parameter `my_bool'
/usr/include/mysql++/connection.h:159: error: syntax error before `=' token
/usr/include/mysql++/connection.h:355: error: syntax error before `)' token
/usr/include/mysql++/connection.h:392: error: semicolon missing after
   declaration of `mysqlpp::Connection'
/usr/include/mysql++/connection.h: In member function `void
   mysqlpp::Connection::close()':
/usr/include/mysql++/connection.h:167: error: `mysql_' undeclared (first use
   this function)
/usr/include/mysql++/connection.h:167: error: (Each undeclared identifier is
   reported only once for each function it appears in.)
/usr/include/mysql++/connection.h:167: error: `mysql_close' undeclared (first
   use this function)
/usr/include/mysql++/connection.h:168: error: `is_connected_' undeclared (first
   use this function)
/usr/include/mysql++/connection.h: In member function `bool
   mysqlpp::Connection::success() const':
/usr/include/mysql++/connection.h:186: error: `success_' undeclared (first use
   this function)
/usr/include/mysql++/connection.h: In member function `const char*
   mysqlpp::Connection::error()':
/usr/include/mysql++/connection.h:224: error: `mysql_error' undeclared (first
   use this function)
/usr/include/mysql++/connection.h: In member function `int
   mysqlpp::Connection::errnum()':
/usr/include/mysql++/connection.h:231: error: `mysql_errno' undeclared (first
   use this function)
.
.
.

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
C++讀取Mysql
« 回覆 #4 於: 2005-09-15 04:06 »
引述: "augsys"
請問Linux Fedora3中要安裝哪些套件及什麼版本才能正常compiler底下範例?要執行C++連Mysql,那邊有範例呢?


好像環境有點亂?

fedora 官方都提供了 mysql rpm package 了,通常沒必要跑去 mysql.com 去另外抓 rpm package,除非你確定你能夠處理好後續帶來的環境議題。另外您似乎也沒去根本看一下 fedora 本身提供的 package 清單與用途,在這樣情況就就跑去亂裝套件似乎是一個很糟糕的情況。

package 清單項目若不會用 yum list 去查閱的話,好歹也可以上 ftp 自己看一下。像是如下 url:

ftp://ftp.isu.edu.tw/pub/Linux/Fedora/linux/core/3/i386/os/Fedora/RPMS/

裡面 mysql 相關檔案有:

代碼: [選擇]
mysql-3.23.58-13.i386.rpm
mysql-bench-3.23.58-13.i386.rpm
mysql-devel-3.23.58-13.i386.rpm
mysql-server-3.23.58-13.i386.rpm


所以一看就知道要安裝上 mysql-devel rpm package,這樣才會有必要 mysql develpment 相關 library/header 檔案可以使用。

另外就是,你也根本不先去看你自己另外裝的 MySQL 4.x package 提供的檔案放哪邊,然後直接說引入 /usr/include 目錄內的檔案,這樣真的抓的到應該才會有問題。若要使用,好歹 rpm -ql 自己查一下裝的檔案位置,到時候編譯時傳入必要的 -L 與 -I 參數。

若是裝標準 fc 提供的 mysql package,那可以執行 mysql_config 程式傳入必要參數,得知目前環境配置。

代碼: [選擇]
$ mysql_config --include --libs                        
-I/usr/include/mysql
-L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto


然後呼叫 gcc 編譯程式傳入這些參數。

代碼: [選擇]
g++ example.cpp -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib -lssl -lcrypto


上面的 -I 參數,請自行再多傳入 -I/usr/include/mysql++ 這類敘述,包含必要的 -l 參數指定連結程式庫檔案。不過我你的程式碼不符合目前 c++ 標準規範,像是沒有引入 std 這個 namespace 的問題,請自己加上 using namespace std 這類敘述解決。

==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

augsys

  • 憂鬱的高中生
  • ***
  • 文章數: 185
    • 檢視個人資料
C++讀取Mysql
« 回覆 #5 於: 2005-09-15 15:23 »
多謝學長秴了資訊,果然沒錯,要装MYsql.再拿CD片來裝一装試試.
順道請教一下學長,要Compiler這個範例,是裝了Mysql這個套件之後要再装那些其它的套件?

多謝多謝....^^