2、使用SQL函数进行连接。
对于1、配置数据源,配置完以后就可以编程 *** 作数据库了。
对于2、使用SQL函数进行连接,参考代码如下:
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
#include<windows.h>
#include<sql.h>
#include<sqlext.h>
void
main()
{
HENV
henv
//环境句柄
HDBC
hdbc
//数据源句柄
HSTMT
hstmt
//执行语句句柄
unsigned
char
datasource[]="数据源名称"
//即源中设置的源名称
unsigned
char
user[]=
"用户名"
//数据库的帐户名
unsigned
char
pwd[]=
"密码"
//数据库的密码
unsigned
char
search[]="select
xm
from
stu
where
xh=0"
SQLRETURN
retcode
//记录各SQL函数的返回情况
//
分配环境句柄
retcode=
SQLAllocEnv(&henv)
//
等介于
SQLAllocHandle(SQL_HANDLE_ENV,
SQL_NULL
,
&henv)
//
设置ODBC环境版本号为3.0
retcode=
SQLSetEnvAttr(henv,
SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3,
0)
//
分配连接句柄
retcode=
SQLAllocConnect(henv,&hdbc)
//
等介于
SQLAllocHandle(SQL_HANDLE_DBC,
henv,
&hdbc)
//设置连接属性,登录超时为*rgbValue秒(可以没有)
//
SQLSetConnectAttr(hdbc,
SQL_LOGIN_TIMEOUT,
(SQLPOINTER)(rgbValue),
0)
//直接连接数据源
//
如果是windows身份验证,第二、三参数可以是
有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译#include<windows.h#endif#include<stdio.h#include<stdlib.h#includemysql.h我的机器上该文件在/usr/local/include/mysql下定义MySQL数据库 *** 作的宏,也可以不定义留着后面直接写进代码defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相当于char*argv[]{MYSQL mysql,*sock定义数据库连接的句柄,它被用于几乎所有的MySQL函数MYSQL_RES *res查询结果集,结构类型MYSQL_FIELD *fd 包含字段信息的结构MYSQL_ROW row 存放一行查询结果的字符串数组char qbuf[160]存放查询sql语句字符串if(argc!=2){//检查输入参数fprintf(stderr,usage:mysql_select<userid\n\n)exit(1)}mysql_init(&mysql)if(!(sock=mysql_real_connect(&mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){fprintf(stderr,Couldn'tconnecttoengine!\n%s\n\n,mysql_error(&mysql))perror()exit(1)}sprintf(qbuf,SELECT_QUERY,atoi(argv[1]))if(mysql_query(sock,qbuf)){fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock))exit(1)}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn'tgetresultfrom%s\n,mysql_error(sock))exit(1)}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res))while(row=mysql_fetch_row(res)){printf(Theruserid#%d'susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)&&(!strlen(row[0])))?NULL:row[0]))puts(queryok!\n)}mysql_free_result(res)mysql_close(sock)exit(0)return0为了兼容大部分的编译器加入此行}编译的时候,使用下面的命令gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况运行的时候,执行下面的命令./mysql_select 1将返回如下结果:numberoffieldsreturned:1Theruserid#1'susernameis:Michaelqueryok!上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档源码天空,各个函数都有详细说明,有时间我整理一份常用的API说明出来。//vc工具中添加E:\WAMP\BIN\MYSQL\MYSQL5.5.8\LIB 路径//在工程设置-》链接》库模块中添加 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平台上的编译
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"
//定义数据库 *** 作的宏,也可以不定义留着后面直接写进代码
#define SELECT_QUERY "show tables"
int main(int argc, char **argv) //char **argv 相当于 char *argv[]
{
MYSQL mysql,*handle //定义数据库连接的句柄,它被用于几乎所有的MySQL函数
MYSQL_RES *result //查询结果集,结构类型
MYSQL_FIELD *field//包含字段信息的结构
MYSQL_ROW row //存放一行查询结果的字符串数组
char querysql[160] //存放查询sql语句字符串
//初始化
mysql_init(&mysql)
//连接数据库
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]))
//查询数据库
if(mysql_query(handle,querysql)) {
fprintf(stderr,"Query failed (%s)\n",mysql_error(handle))
}
//存储结果集
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))
//读取结果集的内容
while (row = mysql_fetch_row(result)) {
printf("table: %s\n",(((row[0]==NULL)&&(!strlen(row[0]))) ? "NULL" : row[0]) )
}
//释放结果集
mysql_free_result(result)
//关闭数据库连接
mysql_close(handle)
system("PAUSE")
//为了兼容大部分的编译器加入此行
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)