Windows下MySQL C编程

系统是Windows7旗舰版,编程环境用的是VC6.0

1. 配置VC

1)打开VC6.0工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Showdirectories for:下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQLinclude目录路径。(我的是D:\Program Files\MySQL\MySQL Server 5.0\include)。

2)在上面说到的“Showdirectories for:”下拉列表中选中“Library files”,然后添加你本地安装MySQLLib目录路径。Lib目录下还有debugopt两个目录,建议选debug。(我的是D:\ProgramFiles\MySQL\MySQL Server 5.0\lib\debug)。

注:在安装MySQL时选择完全安装(只有这样才会安装VC编译时需要的头文件等),当然也可以选择自定义安装,不过要记得把开发套件给选上。

2. 开始编程。

如想在程序中用MySQL数据库,则要添加如下代码:

#include <winsock.h>//因为数据库通信用的socket技术 
#include <mysql.h> 
#pragma comment(lib,"libmysql.lib")  

至于更详细的编程,可参看MySQL手册C API进行编程。

3. 实例

#include <winsock.h>//因为数据库通信用的socket技术
//
需要在VCOptions设置一个include路径指向'%mysql_home%/inlude'目录    
#include <mysql.h> 
//
设置一个lib路径指向'%mysql_home%/lib/opt'目录 (mysql5.0是个目录)   
#include <stdio.h> 
#pragma comment(lib,"libmysql.lib")     
#define host_name "localhost"  //
数据库服务器    
#define db_name "xiaogu"         //
数据库名    
#define user_name "root"       //
用户名    
#define password "root"            //
密码    
int  main( int  argc, char  * argv[]) {    

char  szSqlText[500] ;    

MYSQL *conn;    
MYSQL_RES *rs;    
MYSQL_ROW row;    //
注意它的声明 typedef char**MYSQL_ROW,字符串数组    

conn = mysql_init(NULL);    
if (conn == NULL)    
{    
fprintf(stderr, "mysql_init() failed (probably out of memory)\n" );   
exit(1);    
}    

if  (mysql_real_connect(conn,host_name,user_name,password,    
db_name,MYSQL_PORT,NULL,0) == NULL)    
{    
//
MYSQL初始化之后的操作如果有错误,可以用mysql_errno(MYSQL*)    
//mysql_errer(MYSQL*)
分别获得出错代号和描述    
fprintf(stderr, "mysql_real_connect() failed:\nError %u (%s)\n" ,   
mysql_errno(conn),mysql_error(conn));    
exit(1);    
}    

printf( "connect to db successful.\n" );    


sprintf(szSqlText, "insert into mytable values('2000-3-1021:01:30','Test','MySQLTest',2000,3)" );    
if  (mysql_query(conn,szSqlText)) {    
printf( "Insert values error:\nError %u (%s)\n" ,    
mysql_errno(conn),mysql_error(conn));    
mysql_close(conn);    
return  0;    
}    
else {    
//insert/delete/update
语句可用mysql-affected_rows()得到受作用的行    
printf( "INSERT statement succeeded: %lu rows affected\n" ,   
(unsigned  long )mysql_affected_rows(conn));    
}    

//
查询数据    
sprintf(szSqlText, "select * from mytable" );    

//
执行成功则返回零    
if  (mysql_query(conn,szSqlText) != 0) {    
mysql_close(conn);    
return  0;    
}    
else  {    
//
立即从服务器返回所有行,存储到本地,产生结果集,失败则返回NULL    
rs = mysql_store_result(conn);    

//
结果集是保留在服务器上,fetch_row时才逐行从服务器上取    
//rs = mysql_use_result(conn);    
//Get query result.    
int  count = ( int )mysql_num_rows(rs);    
printf( "Query: %s.\n%ld records found.\n" ,szSqlText,count);   
//MYSQL_ROW
是一个指向数值数组的指针,row[0],row[1]...row[列数-1]    
//
所有的数据类型都以字符串返回,即使是数字型,要进行串转换    
//NULL
指针代表数据库字段的NULL,应经常检查列是否为NULL    
while ((row = mysql_fetch_row(rs)) != NULL){   //
返回NULL,则说明不再有行    
for (unsigned  int  i=0; i<mysql_num_fields(rs);i++){   
if (i>0)    
fputc('\t',stdout);    
printf( "%s" ,row[i]!=NULL ? row[i]: "NULL" );   
}    
fputc('\n',stdout);    
}    
//
使用完后,释放结果集占用内存    
mysql_free_result(rs);    
}    
mysql_close(conn);    
return  0;    
}    
//
最后,注意查询语句中字符串的转义 select a from t where a=''1',是要出错的    
//
空字符转换为'\0',这里的0 是可打印的ASCII 0,而不是空。    
//
反斜线、单引号和双引号分别转换为'\\''\'' '\"'    
//
你也可以用mysql_escape_string(to_str,from_str,from_len)转换sql语句    

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值