兩種方法:
日喀則網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
方法一:在C中 調(diào)用system函數(shù),執(zhí)行mysql命令。
方法二:在C中,調(diào)用mysql的API ,也就是使用mysql接口庫(kù), 訪問(wèn)數(shù)據(jù)庫(kù)。
后者更通用一些。
你的i_query是生成SQL文本文件嗎,反復(fù)調(diào)用fprintf(i_query, "INSERT INTO stock_data values(%.2f,%.2f,%.2f)",v1,v2,v3);可以在文件中生成多行INSERT INTO語(yǔ)句,可以插入多行,但是你多個(gè)SQL語(yǔ)句之間應(yīng)該有分號(hào),你的這個(gè)語(yǔ)句可以修改如下:
fprintf(i_query, "INSERT INTO stock_data values(%.2f,%.2f,%.2f);\n",v1,v2,v3);
//vc工具中添加E:\WAMP\BIN\MYSQL\MYSQL5.5.8\LIB 路徑
//在工程設(shè)置-》鏈接》庫(kù)模塊中添加 libmysql.lib
#include stdio.h
#include time.h
#include string.h
#include winsock.h
#include "E:\wamp\bin\mysql\mysql5.5.8\include\mysql.h"
void main(){
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char *server ="localhost";
char *user ="root";
char *password="";
char *database="test";
char sql[1024]="select * from chinaren";
conn=mysql_init(NULL);
if(!mysql_real_connect(conn,server,user,password,database,0,NULL,0)){
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
if(mysql_query(conn,sql)){
fprintf(stderr,"%s\n",mysql_error(conn));
exit(1);
}
res=mysql_use_result(conn);
while((row = mysql_fetch_row(res))!=NULL){
printf("%s\n",row[2]);
}
mysql_free_result(res);
mysql_close(conn);
}
===============================
#if defined(_WIN32) || defined(_WIN64) //為了支持windows平臺(tái)上的編譯
#include windows.h
#endif
#include stdio.h
#include stdlib.h
#include "mysql.h"
//定義數(shù)據(jù)庫(kù)操作的宏,也可以不定義留著后面直接寫進(jìn)代碼
#define SELECT_QUERY "show tables;"
int main(int argc, char **argv) //char **argv 相當(dāng)于 char *argv[]
{
MYSQL mysql,*handle; //定義數(shù)據(jù)庫(kù)連接的句柄,它被用于幾乎所有的MySQL函數(shù)
MYSQL_RES *result; //查詢結(jié)果集,結(jié)構(gòu)類型
MYSQL_FIELD *field ; //包含字段信息的結(jié)構(gòu)
MYSQL_ROW row ; //存放一行查詢結(jié)果的字符串?dāng)?shù)組
char querysql[160]; //存放查詢sql語(yǔ)句字符串
//初始化
mysql_init(mysql);
//連接數(shù)據(jù)庫(kù)
if (!(handle = mysql_real_connect(mysql,"localhost","user","pwd","dbname",0,NULL,0))) {
fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(mysql));
}
sprintf(querysql,SELECT_QUERY,atoi(argv[1]));
//查詢數(shù)據(jù)庫(kù)
if(mysql_query(handle,querysql)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(handle));
}
//存儲(chǔ)結(jié)果集
if (!(result=mysql_store_result(handle))) {
fprintf(stderr,"Couldn't get result from %s\n", mysql_error(handle));
}
printf("number of fields returned: %d\n",mysql_num_fields(result));
//讀取結(jié)果集的內(nèi)容
while (row = mysql_fetch_row(result)) {
printf("table: %s\n",(((row[0]==NULL)(!strlen(row[0]))) ? "NULL" : row[0]) ) ;
}
//釋放結(jié)果集
mysql_free_result(result);
//關(guān)閉數(shù)據(jù)庫(kù)連接
mysql_close(handle);
system("PAUSE");
//為了兼容大部分的編譯器加入此行
return 0;
}
假如用戶輸入的姓名和年齡值分別保存在變量name,age中:
char sql_insert[200];
sprintf(sql_insert, "INSERT INTO table values('%s','%d');", name, age);
mysql_query(mysql_conn, sql_insert);
上述語(yǔ)句在執(zhí)行完sprintf語(yǔ)句后,sql_insert中保存的是INSERT查詢語(yǔ)句字符串,sql_insert作為mysql_query()語(yǔ)句的參數(shù)即可實(shí)現(xiàn)正確的插入。
無(wú)論什么語(yǔ)言給什么數(shù)據(jù)庫(kù)插入數(shù)據(jù),用的都是SQL語(yǔ)言的insert
into語(yǔ)句。具體格式:
insert
into
表名(列名1,列名2,...,列名n)values('值1','值2',...,'值n');
1、配置ODBC數(shù)據(jù)源。
2、使用SQL函數(shù)進(jìn)行連接。
對(duì)于1、配置數(shù)據(jù)源,配置完以后就可以編程操作數(shù)據(jù)庫(kù)了。
對(duì)于2、使用SQL函數(shù)進(jìn)行連接,參考代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#includewindows.h
#includesql.h
#includesqlext.h
void
main()
{
HENV
henv;
//環(huán)境句柄
HDBC
hdbc;
//數(shù)據(jù)源句柄
HSTMT
hstmt;
//執(zhí)行語(yǔ)句句柄
unsigned
char
datasource[]="數(shù)據(jù)源名稱";
//即源中設(shè)置的源名稱
unsigned
char
user[]=
"用戶名";
//數(shù)據(jù)庫(kù)的帳戶名
unsigned
char
pwd[]=
"密碼";
//數(shù)據(jù)庫(kù)的密碼
unsigned
char
search[]="select
xm
from
stu
where
xh=0";
SQLRETURN
retcode;
//記錄各SQL函數(shù)的返回情況
//
分配環(huán)境句柄
retcode=
SQLAllocEnv(henv);
//
等介于
SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL
,
henv);
//
設(shè)置ODBC環(huán)境版本號(hào)為3.0
retcode=
SQLSetEnvAttr(henv,
SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,
0);
//
分配連接句柄
retcode=
SQLAllocConnect(henv,hdbc);
//
等介于
SQLAllocHandle(SQL_HANDLE_DBC,
henv,
hdbc);
//設(shè)置連接屬性,登錄超時(shí)為*rgbValue秒(可以沒(méi)有)
//
SQLSetConnectAttr(hdbc,
SQL_LOGIN_TIMEOUT,
(SQLPOINTER)(rgbValue),
0);
//直接連接數(shù)據(jù)源
//
如果是windows身份驗(yàn)證,第二、三參數(shù)可以是