最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++連接mysql的方法(直接調(diào)用C-API)

 更新時間:2017年06月24日 16:17:00   投稿:mdxy-dxy  
首先安裝mysql,點完全安裝,才能在在安裝目錄include找到相應(yīng)的頭文件,注意,是完全安裝,需要的朋友可以參考下

我裝的是5.1版本,需要的頭文件有

把需要的文件添加進去,然后再把 libmysql.lib放到項目目錄里,文件在mysql安裝目錄 lib 下面.

#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#include "mysql.h"
//#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib,"libmysql.lib")
using namespace std;
int main(int argc, char* argv[])
{
 
  mysql_library_init(NULL,0,0); 
  MYSQL mysql;
  mysql_init(&mysql);
 
  if(0==mysql_options(&mysql,MYSQL_SET_CHARSET_NAME,"utf8"))//設(shè)置字符集
  {
    cout << "設(shè)置字符集成功\n\n" <<endl;
  }
 
  if(!mysql_real_connect(&mysql,"localhost","root","kwgkwg","test",0,NULL,CLIENT_MULTI_STATEMENTS))//連接數(shù)據(jù)庫
  {
    cout << "not connect mysql" << endl;
  }else
  {
    cout << "welcome to mysql\n\n\n";
  }
 
  mysql_query(&mysql,"select * from demo1");     //執(zhí)行SQL語句
  MYSQL_RES *result=mysql_store_result(&mysql);    //獲取資源
  int rowcount=mysql_num_rows(result);        //獲取記錄數(shù)
  unsigned int fieldcount=mysql_num_fields(result);  //獲取字段數(shù)
 
  //cout << rowcount << endl;
 
  MYSQL_FIELD *field=NULL;              //字段
  MYSQL_ROW row=NULL;             //記錄
  while(row=mysql_fetch_row(result))
  {
    for(unsigned int i=0;i<fieldcount;i++)
    {
      field=mysql_fetch_field_direct(result,i);
      cout<<field->name<<":"<<row[i] <<"\n";
    }
  } 
 
 
  mysql_free_result(result);
  mysql_close(&mysql);
  mysql_server_end();
  mysql_library_end();
   
  return 0;
}

C++訪問 (直接調(diào)用C-API)

#include <iostream> 
#include <windows.h> 
#include <mysql.h> 
#include <string> 
static const char host[32] = "localhost"; 
static const char user[32] = "test"; 
static const char passwd[32] = "passwd"; 
static const char db[32] = "test"; 
/** 
mysql> select * from t; 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec) 
mysql> delimiter // 
mysql> create procedure get_t(in t1 int) 
  -> begin 
  -> select id from t where id=t1; 
  -> end 
  -> // 
Query OK, 0 rows affected (0.05 sec) 
mysql> call get_t(1); 
  -> // 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec) 
Query OK, 0 rows affected (0.00 sec) 
*/ 
void test_more_results(MYSQL* h) 
{ 
  char str[512] = "insert into test_num values(101);insert into test_num values(122);commit;"; 
  int r = mysql_real_query(h, str, strlen(str)); 
  if (r) 
  { 
    const char * error = mysql_error(h); 
    std::cout<<"*** Connection Error " << error << std::endl; 
  } 
  do 
  { 
    MYSQL_RES* res = mysql_store_result(h); 
    mysql_free_result(res); 
  } 
  while ( (0 == mysql_next_result(h)) ); 
   
} 
void test_proc_stmt(MYSQL* h) 
{ 
  MYSQL* mysql_ = h; 
  MYSQL_BIND     bind; 
  MYSQL_BIND     obind[1]; 
  // test_more_results(mysql_); 
  MYSQL_STMT *hStmt = mysql_stmt_init(mysql_); 
  my_bool true_value= 1; 
  mysql_stmt_attr_set(hStmt, STMT_ATTR_UPDATE_MAX_LENGTH, (void*) &true_value);   
  char sql[] = "call get_t(?)"; 
  //char sql[] = "select id from t where id=?"; 
  if (mysql_stmt_prepare(hStmt, sql, strlen(sql))) 
  { 
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; 
    mysql_stmt_reset(hStmt); 
    if (mysql_stmt_prepare(hStmt, sql, strlen(sql))) 
    { 
      std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; 
      mysql_close(mysql_); 
      exit( -1); 
    } 
  } 
  int id = 1; 
  unsigned long id_len = 0; 
  memset(&bind, 0, sizeof(bind)); 
  bind.buffer_type = FIELD_TYPE_LONG; 
  bind.buffer = (void*)&id; 
  bind.is_unsigned = true; 
  bind.length = &id_len; 
  // bind[0].buffer_length = sizeof(id); 
  // bind[0].is_null = 0; 
   
  if (mysql_stmt_bind_param(hStmt,(MYSQL_BIND*)(&bind)) != 0) 
  { 
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; 
    mysql_close(mysql_); 
    exit( -1); 
  } 
  if (mysql_stmt_execute(hStmt) != 0) 
  { 
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; 
    mysql_close(mysql_); 
    exit( -1); 
  } 
  int t2; 
  memset(obind, 0, sizeof(obind)); 
  obind[0].buffer_type= MYSQL_TYPE_LONG; 
  obind[0].buffer= (char *)&t2; 
  obind[0].buffer_length = sizeof(t2); 
   
  if (mysql_stmt_bind_result(hStmt, (MYSQL_BIND*)&obind[0]) != 0) 
  { 
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; 
    mysql_close(mysql_); 
    exit( -1); 
  } 
  if ( mysql_stmt_store_result(hStmt) != 0 ) 
  { 
    std::cout<<__LINE__<<": stmt prepare error: "<< (mysql_stmt_error(hStmt))<<std::endl; 
    mysql_close(mysql_); 
    exit( -1); 
  } 
   
   
  int rows = mysql_stmt_num_rows(hStmt); 
  for (int i=0; i<rows; i++) 
  { 
    if (mysql_stmt_fetch(hStmt) == 0) 
    { 
      std::cout<<"id = "<<t2<<std::endl; 
    } 
  } 
  mysql_stmt_free_result(hStmt); 
  mysql_stmt_close(hStmt); 
} 
// 
// Just for demo only. 
// 
int main() 
{ 
  MYSQL*       mysql_ = NULL; 
  MYSQL_RES*     result_ = NULL; 
  MYSQL_ROW      row_; 
  mysql_ = mysql_init(mysql_); 
  // if (mysql_real_connect(mysql_, host, user, passwd, db, 3306, NULL, CLIENT_MULTI_STATEMENTS) == NULL) 
  if (mysql_real_connect(mysql_, host, user, passwd, db, 3306, NULL, CLIENT_MULTI_STATEMENTS) == NULL) 
  { 
    const char * error = mysql_error(mysql_); 
    std::cout<<"*** Connection Error " << error << std::endl; 
    return -1; 
  } 
  mysql_autocommit(mysql_, false); 
  std::string encodeStr = "set names 'gbk'"; 
  mysql_real_query(mysql_, encodeStr.c_str(), encodeStr.size()); 
   
  /* 
  const char* tmpTableName = "t"; // assume you are querying the table 't' 
  char str[512]; 
  int cnt = 0; 
  sprintf(str,"select count(*) as cnt from %s", tmpTableName); 
  mysql_real_query(mysql_, str, strlen(str)); 
  result_ = mysql_store_result(mysql_); 
  while (row_ = mysql_fetch_row(result_)) 
  { 
    // get the field value 
    if (row_[0]) 
    { 
      std::cout<<"count = "<<row_[0]<<std::endl; 
      // convert it into int 
      cnt = atoi(row_[0]); 
      std::cout<<"cnt value = "<<row_[0]<<std::endl; 
    } 
  } 
  mysql_free_result(result_); 
  test_more_results(); 
  */ 
  test_proc_stmt(mysql_); 
   
  do 
  { 
    MYSQL_RES* res = mysql_store_result(mysql_); 
    mysql_free_result(res); 
  } 
  while ( (0 == mysql_next_result(mysql_)) ); 
   
  test_proc_stmt(mysql_); 
  mysql_close(mysql_); 
  return 0; 
} 

這樣就差不多了,大家可以根據(jù)需要選擇。

相關(guān)文章

  • C++設(shè)計模式中的觀察者模式一起來看看

    C++設(shè)計模式中的觀察者模式一起來看看

    這篇文章主要為大家詳細介紹了C++觀察者模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++ TinyXML解析案例詳解

    C++ TinyXML解析案例詳解

    這篇文章主要介紹了C++ TinyXML解析案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言中的sscanf和sprintf常見用途

    C語言中的sscanf和sprintf常見用途

    sscanf和sprintf是C語言中用于字符串與數(shù)據(jù)轉(zhuǎn)換的函數(shù),類似scanf/printf但處理字符串而非輸入輸出流,本文給大家介紹C語言中的sscanf和sprintf常見用途,感興趣的朋友一起看看吧
    2025-09-09
  • C語言中字符串的兩種定義方式詳解

    C語言中字符串的兩種定義方式詳解

    這篇文章主要為大家詳細介紹了C語言中字符串的兩種定義方式,小編覺得這篇文章寫的還不錯,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 從string類的實現(xiàn)看C++類的四大函數(shù)(面試常見)

    從string類的實現(xiàn)看C++類的四大函數(shù)(面試常見)

    C++類一般包括構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)四大函數(shù),非常常見,本文給大家介紹從string類的實現(xiàn)看C++類的四大函數(shù),一起看看吧
    2016-06-06
  • QT5實現(xiàn)電子時鐘

    QT5實現(xiàn)電子時鐘

    這篇文章主要為大家詳細介紹了QT5實現(xiàn)電子時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++11實現(xiàn)字符串分割的示例

    C++11實現(xiàn)字符串分割的示例

    本文主要介紹了C++11實現(xiàn)字符串分割的示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實現(xiàn)線性表鏈式存儲(單鏈)

    C++實現(xiàn)線性表鏈式存儲(單鏈)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)線性表鏈式存儲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C 程序?qū)崿F(xiàn)密碼隱秘輸入的實例 linux系統(tǒng)可執(zhí)行

    C 程序?qū)崿F(xiàn)密碼隱秘輸入的實例 linux系統(tǒng)可執(zhí)行

    下面小編就為大家?guī)硪黄狢 程序?qū)崿F(xiàn)密碼隱秘輸入的實例 linux系統(tǒng)可執(zhí)行。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • C語言中實現(xiàn)協(xié)程案例

    C語言中實現(xiàn)協(xié)程案例

    這篇文章主要介紹了C語言中實現(xiàn)協(xié)程案例,本文通過將協(xié)程與線程和異步回調(diào)進行對比,以及具體實現(xiàn)案例,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論

偏关县| 丹江口市| 乡城县| 陈巴尔虎旗| 赞皇县| 临沧市| 高唐县| 高唐县| 吴堡县| 洪泽县| 台北市| 庐江县| 罗江县| 黄大仙区| 萍乡市| 安阳市| 麻江县| 台南市| 襄汾县| 阿鲁科尔沁旗| 且末县| 札达县| 宁强县| 宜良县| 昌邑市| 秦皇岛市| 涪陵区| 古丈县| 休宁县| 塔河县| 怀柔区| 苏尼特右旗| 宿州市| 双柏县| 荔浦县| 吕梁市| 闽清县| 佛学| 项城市| 隆子县| 怀化市|