欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門(mén)教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

C/C++ 連接MySql數(shù)據(jù)庫(kù)的方法

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

一、VS2008工程設(shè)置工作

首先,建立一個(gè)windows應(yīng)用程序的工程,將C/C++->預(yù)處理器->預(yù)處理器定義下的_WINDOWS改為_(kāi)CONSOLE,

將連接器->系統(tǒng)->子系統(tǒng) 選擇為控制臺(tái)。

由于我們要使用Mysql的API,并且我們機(jī)子上肯定安裝了Mysql數(shù)據(jù)庫(kù),所以我們要將工程的頭文件路徑指向Mysql安裝目錄的同文件mysql.h所在的位置,將連接庫(kù)路徑指向libmysql.lib所在的路徑,

在我的機(jī)子上,Mysql 的安裝路徑為:C:\Program Files\MySQL\MySQL Server 5.1

我們需要把VS2008的工程中的頭文件路徑和連接庫(kù)路徑指向上面的兩個(gè)地方:

將x項(xiàng)目屬性頁(yè)的C/C++->常規(guī)->附加包含目錄指向:C:\Program Files\MySQL\MySQL Server 5.1\include

將項(xiàng)目屬性頁(yè)的鏈接器->常規(guī)->附加庫(kù)目錄指向:C:\Program Files\MySQL\MySQL Server 5.1\lib\opt.

將鏈接器->輸入->附加依賴(lài)項(xiàng)中添加libmysql.lib。

如果不設(shè)置鏈接器->輸入->附加依賴(lài)項(xiàng)中添加libmysql.lib,那么會(huì)出現(xiàn)如下的錯(cuò)誤:

1>------ 已啟動(dòng)全部重新生成: 項(xiàng)目: MySql-Connect, 配置: Debug Win32 ------ 
1>正在刪除項(xiàng)目“MySql-Connect”(配置“Debug|Win32”)的中間文件和輸出文件 
1>正在編譯... 
1>MySql_Connect.cpp 
1>x:\編程練習(xí)\c-c++\c\mysql_connect.cpp(35) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 
1>    d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 參見(jiàn)“scanf”的聲明 
1>x:\編程練習(xí)\c-c++\c\mysql_connect.cpp(72) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 
1>    d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 參見(jiàn)“sprintf”的聲明 
1>x:\編程練習(xí)\c-c++\c\mysql_connect.cpp(86) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 
1>    d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 參見(jiàn)“sprintf”的聲明 
1>正在編譯資源清單... 
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 
1>Copyright (C) Microsoft Corporation. All rights reserved. 
1>正在鏈接... 
1>LINK : 沒(méi)有找到 d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe 或上一個(gè)增量鏈接沒(méi)有生成它;正在執(zhí)行完全鏈接 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_close@4,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_free_result@4,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_num_fields@4,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_fetch_row@4,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_store_result@4,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_error@4,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_real_query@12,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_select_db@8,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_real_connect@32,該符號(hào)在函數(shù) _main 中被引用 
1>MySql_Connect.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _mysql_init@4,該符號(hào)在函數(shù) _main 中被引用 
1>d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe : fatal error LNK1120: 10 個(gè)無(wú)法解析的外部命令 
1>生成日志保存在“file://d:\我的文檔\Visual Studio 2008\Projects\MySql-Connect\MySql-Connect\Debug\BuildLog.htm” 
1>MySql-Connect - 11 個(gè)錯(cuò)誤,3 個(gè)警告 
========== 全部重新生成: 成功 0 個(gè),失敗 1 個(gè),跳過(guò) 0 個(gè) ==========

二、連接Mysql和從MySql中取出數(shù)據(jù)的API介紹

2.1 mysql_real_connect()

2.1.1 函數(shù)原型:

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)

2.1.2 參數(shù)說(shuō)明:

• 第一個(gè)參數(shù)應(yīng)該是一個(gè)現(xiàn)存MYSQL結(jié)構(gòu)的地址。在調(diào)用mysql_real_connect()之前,你必須調(diào)用mysql_init()初始化MYSQL結(jié)構(gòu)。見(jiàn)下面的例子。

• host值可以是一個(gè)主機(jī)名或一個(gè)IP地址。如果host是NULL或字符串"localhost",假定是到本地主機(jī)的一個(gè)連接。如果OS支持套接字(Unix)或命名管道(Win32),使用他們而不是TCP/IP與服務(wù)器連接。

• user參數(shù)包含用戶(hù)的MySQL登錄ID。如果user是NULL,假定是當(dāng)前用戶(hù)。在Unix下,它是當(dāng)前登錄名。在Windows ODBC下,必須明確地指定當(dāng)前用戶(hù)名字。見(jiàn)16.4 怎樣填寫(xiě)ODBC管理程序中各種域。

• passwd參數(shù)為user包含口令。如果passwd是NULL,只有在user表中對(duì)于有一個(gè)空白口令字段的用戶(hù)的條目將被檢查一個(gè)匹配。這允許數(shù)據(jù)庫(kù)主管設(shè)置MySQL權(quán)限,使用戶(hù)獲得不同的口令,取決于他們是否已經(jīng)指定一個(gè)口令。注意:不要試圖在調(diào)用mysql_real_connect()前加密口令;口令加密自動(dòng)被客戶(hù)API處理。

• db是數(shù)據(jù)庫(kù)名。如果db不是NULL,連接將缺省數(shù)據(jù)庫(kù)設(shè)置為這個(gè)值。

• 如果port不是0,值對(duì)于TCP/IP連接將用作端口號(hào)。注意host參數(shù)決定連接的類(lèi)型。

• 如果unix_socket不是NULL,字符串指定套接字或應(yīng)該被使用的命名管道。注意host參數(shù)決定連接的類(lèi)型。

• client_flag值通常是0,但是在很特殊的情況下可以被設(shè)置為下列標(biāo)志的組合:

標(biāo)志名字 意味著的標(biāo)志

CLIENT_FOUND_ROWS 返回找到的(匹配的)行數(shù),不是受到影響的行數(shù)。

CLIENT_NO_SCHEMA 不允許db_name.tbl_name.col_name語(yǔ)法。這是為了ODBC;如果你使用該語(yǔ)法,導(dǎo)致語(yǔ)法分析器產(chǎn)生一個(gè)錯(cuò)誤,它是為在一些ODBC程序捕捉錯(cuò)誤是有用的。

CLIENT_COMPRESS 使用壓縮協(xié)議。

CLIENT_ODBC 客戶(hù)是一個(gè)ODBC客戶(hù)。這使mysqld變得對(duì)ODBC更友好。

2.1.3 返回值

如果連接成功,一個(gè) MYSQL*連接句柄。如果連接失敗,NULL。對(duì)一個(gè)成功的連接,返回值與第一個(gè)參數(shù)值相同,除非你傳遞NULL給該參數(shù)。

2.1.4 錯(cuò)誤

CR_CONN_HOST_ERROR

不能連接MySQL服務(wù)器。

CR_CONNECTION_ERROR

不能連接本地MySQL服務(wù)器。

CR_IPSOCK_ERROR

不能創(chuàng)建一個(gè)IP套接字。

CR_OUT_OF_MEMORY

內(nèi)存溢出。

CR_SOCKET_CREATE_ERROR

不能創(chuàng)建一個(gè)Unix套接字。

CR_UNKNOWN_HOST

不能找到主機(jī)名的IP地址。

CR_VERSION_ERROR

由于試圖使用一個(gè)不同協(xié)議版本的一個(gè)客戶(hù)庫(kù)與一個(gè)服務(wù)器連接導(dǎo)致的一個(gè)協(xié)議失配。如果你使用一個(gè)非常老的客戶(hù)庫(kù)連接一個(gè)沒(méi)有使用--old-protocol選項(xiàng)啟動(dòng)的新服務(wù)器,這就能發(fā)生。

CR_NAMEDPIPEOPEN_ERROR;

不能在 Win32 上創(chuàng)建一個(gè)命名管道。

CR_NAMEDPIPEWAIT_ERROR;

不能在 Win32 上等待一個(gè)命名管道。

CR_NAMEDPIPESETSTATE_ERROR;

不能在 Win32 上得到一個(gè)管道處理器。

2.2 mysql_select_db()

2.2.1 函數(shù)原型

int mysql_select_db(MYSQL *mysql, const char *db)

2.2.2 參數(shù)說(shuō)明

使得由db指定的數(shù)據(jù)庫(kù)成為 在由mysql指定的連接上的缺省(當(dāng)前)數(shù)據(jù)庫(kù)。在隨后的查詢(xún)中,這個(gè)數(shù)據(jù)庫(kù)對(duì)于不包括一個(gè)顯式的數(shù)據(jù)庫(kù)指定符的表的引用是缺省數(shù)據(jù)庫(kù)。

除非連接的用戶(hù)能被認(rèn)證允許使用數(shù)據(jù)庫(kù),否則mysql_select_db()失敗。

2.2.3 返回值

成功,零。如果發(fā)生一個(gè)錯(cuò)誤,非零。

2.2.4 錯(cuò)誤

CR_COMMANDS_OUT_OF_SYNC

命令以一個(gè)不適當(dāng)?shù)拇涡虮粓?zhí)行。

CR_SERVER_GONE_ERROR

MySQL服務(wù)器關(guān)閉了。

CR_SERVER_LOST

對(duì)服務(wù)器的連接在查詢(xún)期間失去。

CR_UNKNOWN_ERROR

發(fā)生一個(gè)未知的錯(cuò)誤。

2.3 mysql_real_query

2.3.1 函數(shù)原型

int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)

2.3.2 參數(shù)說(shuō)明

執(zhí)行由query指向的SQL查詢(xún),它應(yīng)該是一個(gè)length個(gè)字節(jié)的字符串。查詢(xún)必須由一個(gè)單個(gè)的SQL語(yǔ)句組成。你不應(yīng)該在語(yǔ)句后增加一個(gè)終止的分號(hào)(“;”)或\g。

對(duì)于包含二進(jìn)制數(shù)據(jù)的查詢(xún),你必須使用mysql_real_query()而不是mysql_query(),因?yàn)槎M(jìn)制代碼數(shù)據(jù)可能包含“\0”字符,而且,mysql_real_query()比mysql_query()更快,因?yàn)樗鼘?duì)查詢(xún)字符串調(diào)用strlen()。

2.3.3 返回值

如果查詢(xún)成功,零。如果發(fā)生一個(gè)錯(cuò)誤,非零。

2.3.4 錯(cuò)誤

CR_COMMANDS_OUT_OF_SYNC

命令以一個(gè)不適當(dāng)?shù)拇涡虮粓?zhí)行。

CR_SERVER_GONE_ERROR

MySQL服務(wù)器關(guān)閉了。

CR_SERVER_LOST

對(duì)服務(wù)器的連接在查詢(xún)期間失去。

CR_UNKNOWN_ERROR

發(fā)生一個(gè)未知的錯(cuò)誤。

2.4 mysql_store_result

2.4.1 函數(shù)原型

MYSQL_RES *mysql_store_result(MYSQL *mysql)

2.4.2 返回值

A MYSQL_RES result structure with the results. NULL (0) if an error occurred.

2.5 mysql_fetch_row()

Description

Retrieves the next row of a result set. When used after mysql_store_result(), mysql_fetch_row() returns NULL when there are no more rows to retrieve. When used after mysql_use_result(), mysql_fetch_row() returns NULL when there are no more rows to retrieve or if an error occurred.

The number of values in the row is given by mysql_num_fields(result). If row holds the return value from a call tomysql_fetch_row(), pointers to the values are accessed as row[0] to row[mysql_num_fields(result)-1]. NULL values in the row are indicated by NULL pointers.

The lengths of the field values in the row may be obtained by calling mysql_fetch_lengths(). Empty fields and fields containing NULL both have length 0; you can distinguish these by checking the pointer for the field value. If the pointer is NULL, the field is NULL; otherwise, the field is empty.

Return Values

A MYSQL_ROW structure for the next row. NULL if there are no more rows to retrieve or if an error occurred.

Errors

Note that error is not reset between calls to mysql_fetch_row()

  • CR_SERVER_LOST

    The connection to the server was lost during the query.

  • CR_UNKNOWN_ERROR

    An unknown error occurred.

參考資料:http://dev.mysql.com/doc/refman/5.6/en/index.html

三、利用Mysql庫(kù)提供的API編寫(xiě)連接Mysql和從Mysql中取出數(shù)據(jù)的代碼

 #include <windows.h>
 #include "stdio.h"
 #include "winsock.h" 
 #include "mysql.h" 
  
  
 int main()
 {
  
 MYSQL * con; //= mysql_init((MYSQL*) 0); 
 MYSQL_RES *res;
 MYSQL_ROW row;
  
  
 char tmp[400];
  
 //database configuartion
 char dbuser[30]="root"; 
 char dbpasswd[30]="apple";
 char dbip[30]="localhost";
 char dbname[50]="excel";
 char tablename[50]="test";
 char *query=NULL;
  
  
 int x;
 int y;
 int rt;//return value
 unsigned int t;
  
 int count = 0;
  
  
 printf("input x,y\n");
 scanf("%d,%d",&x,&y);
 fflush(stdin);
 printf("input over\n");
 con = mysql_init((MYSQL*) 0); 
  
  
 if ( con !=NULL && mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,3306/*TCP IP端口*/,NULL/*Unix Socket 連接類(lèi)型*/,0/*運(yùn)行成ODBC數(shù)據(jù)庫(kù)標(biāo)志*/) ) 
 { 
   if (!mysql_select_db(con,dbname)) 
   { 
     printf("Select successfully the database!\n"); 
     
     con ->reconnect = 1; 
  
     query = "set names \'GBK\'";
     //mysql_query(con,"set names \'GBK\'"); 
     
     rt=mysql_real_query(con,query,strlen(query));
     if (rt)
     {
       printf("Error making query: %s !!!\n",mysql_error(con));
     }
     else
     {
       printf("query %s succeed!\n",query);
     }
     
   }
 }
  
 else
 {
   MessageBoxA(NULL,"Unable to connect the database,check your configuration!","",NULL);
  
 }
  
   //sprintf(tmp,"update %s set 商品=\'%s\',賣(mài)出=%d,成交=%d,漲跌=%d,買(mǎi)進(jìn)=%d,總量=%d,漲幅=%f,時(shí)間=\'%s\' where %s",tablename,goods,sold,deal,fluctuate,buy,total,delta,time,UpdateCon);
   sprintf(tmp,"insert into %s values(%s,%d,%d)",tablename,"null",x,y); //注意如何向具有自增字段的數(shù)據(jù)庫(kù)中插入記錄
   //MessageBoxA(NULL,tmp,tmp,MB_OK);
   //mysql_query(con,tmp);
  
   rt=mysql_real_query(con,tmp,strlen(tmp));
   if (rt)
   {
     printf("Error making query: %s !!!\n",mysql_error(con));
   }
   else
   {
     printf("%s executed!!!\n",tmp);
   }
   
   sprintf(tmp,"select * from %s",tablename);
   
   rt=mysql_real_query(con,tmp,strlen(tmp));
   if (rt)
   {
     printf("Error making query: %s !!!\n",mysql_error(con));
   } 
   else
   {
     printf("%s executed!!!\n",tmp);
   }
   
   res = mysql_store_result(con);//將結(jié)果保存在res結(jié)構(gòu)體中
  
   while(row = mysql_fetch_row(res)) 
   { 
     /** 
     * MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); 
      * 檢索行 
     */ 
  
     for(t=0;t<mysql_num_fields(res);t++) 
     { 
       printf("%s ",row[t]); 
     } 
     printf(".............\n"); 
     count ++;
   } 
   printf("number of rows %d\n",count);
   printf("mysql_free_result...\n"); 
   mysql_free_result(res); 
  
   mysql_close(con);
   return 0;
  
 }

四、運(yùn)行結(jié)果

 

五、數(shù)據(jù)庫(kù)腳本

/*
Navicat MySQL Data Transfer

Source Server : localhost
Source Server Version : 50141
Source Host : localhost:3306
Source Database : excel

Target Server Type : MYSQL
Target Server Version : 50141
File Encoding : 65001

Date: 2011-09-23 10:41:43
*/

 SET FOREIGN_KEY_CHECKS=0;
 -- ----------------------------
 -- Table structure for `test`
 -- ----------------------------
 DROP TABLE IF EXISTS `test`;
 CREATE TABLE `test` (
  `x` bigint(4) NOT NULL AUTO_INCREMENT,
  `y` int(4) DEFAULT NULL,
  `z` int(4) DEFAULT NULL,
  PRIMARY KEY (`x`)
 ) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=latin1;
  
 -- ----------------------------
 -- Records of test
 -- ----------------------------
 INSERT INTO `test` VALUES ('95', '12432', '4334');
 INSERT INTO `test` VALUES ('96', '213', '321');
 INSERT INTO `test` VALUES ('97', '213', '213');
 INSERT INTO `test` VALUES ('98', '123', '231');
 INSERT INTO `test` VALUES ('99', '321', '231');
 INSERT INTO `test` VALUES ('100', '123', '32132');
 INSERT INTO `test` VALUES ('101', '777', '32213');
 INSERT INTO `test` VALUES ('102', '123', '213');
 INSERT INTO `test` VALUES ('103', '21', '321');
 INSERT INTO `test` VALUES ('104', '324', '432');
 INSERT INTO `test` VALUES ('105', '132', '231');
 INSERT INTO `test` VALUES ('106', '324', '342');
 INSERT INTO `test` VALUES ('107', '23', '23');
 INSERT INTO `test` VALUES ('108', '12', '21');
 INSERT INTO `test` VALUES ('109', '231', '321');
 INSERT INTO `test` VALUES ('110', '123', '231');
 INSERT INTO `test` VALUES ('111', '123', '231');
 INSERT INTO `test` VALUES ('112', '123', '123');
 INSERT INTO `test` VALUES ('113', '312', '231');
 INSERT INTO `test` VALUES ('114', '312', '321');
 INSERT INTO `test` VALUES ('115', '23', '3');
 INSERT INTO `test` VALUES ('116', '213', '312');
 INSERT INTO `test` VALUES ('117', '2', '3');
  
 -- ----------------------------
 -- Table structure for `xqdata`
 -- ----------------------------
 DROP TABLE IF EXISTS `xqdata`;
 CREATE TABLE `xqdata` (
  `代碼` varchar(20) NOT NULL DEFAULT '',
  `商品` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
  `賣(mài)出` bigint(20) DEFAULT NULL,
  `成交` bigint(20) DEFAULT NULL,
  `漲跌` bigint(20) DEFAULT NULL,
  `買(mǎi)進(jìn)` bigint(20) DEFAULT NULL,
  `總量` bigint(20) DEFAULT NULL,
  `漲幅` double DEFAULT NULL,
  `時(shí)間` time DEFAULT NULL,
  PRIMARY KEY (`代碼`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  
 -- ----------------------------
 -- Records of xqdata
 -- ----------------------------
 INSERT INTO `xqdata` VALUES ('FITX*1', '商品', '34', '43', '23', '34', '0', '1.4', '13:23:08');

更正樓主一點(diǎn)內(nèi)容:_WINDOWS改為_(kāi)CONSOLE,你創(chuàng)建的是對(duì)話(huà)框等窗口應(yīng)用程序時(shí)不用修改這些宏,我覺(jué)得你創(chuàng)建控制臺(tái)程序系統(tǒng)也會(huì)自動(dòng)改成_CONSOLE,這點(diǎn)不用修改(我用的是VS2012不知VS2008要不要改動(dòng))。

上一篇:C語(yǔ)言 數(shù)據(jù)結(jié)構(gòu)平衡二叉樹(shù)實(shí)例詳解

欄    目:C語(yǔ)言

下一篇:C++ 中循環(huán)鏈表和約瑟夫環(huán)

本文標(biāo)題:C/C++ 連接MySql數(shù)據(jù)庫(kù)的方法

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1446.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有