c mysql数据库连接字符串,VC使用C API 连接操作MySQL数据库

#include <windows.h>

//需要在VC的Options设置一个include路径指向'%mysql_home%/inlude'目录

#include <mysql.h>

//设置一个lib路径指向'%mysql_home%/lib/opt'目录 (mysql5.0是个目录)

#pragma comment(lib,"libmysql.lib")

#define host_name "localhost"  //数据库服务器

#define db_name "test"         //数据库名

#define user_name "root"       //用户名

#define password ""            //密码

int main(int argc,char * argv[]) {

char szSqlText[500] ;

MYSQL *conn;

MYSQL_RES *rs;

MYSQL_ROW row;

//注意它的声明 typedef char **MYSQL_ROW,字符串数组

BOOL bCreate = FALSE;

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");

if(bCreate){

//第一次运行创建一个表mytable

sprintf(szSqlText,"create table mytable(time datetime,s1 char(6),s2 char(11),s3 int,s4 int)");

if(mysql_query(conn,szSqlText)) {

printf("Can't create table.\n");

mysql_close(conn);

return 0;

}

}

sprintf(szSqlText,"insert into mytable values('2000-3-10 21: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语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值