MySQL的C语言编程(一)

时间:2022-10-27 09:15:18

初学MySQL,记录一下MySQL用c语言编程时遇到的问题。

这是我的源程序:

 1 int main(void)
2 {
3 MYSQL *mysql=NULL;
4
5
6 if((mysql=mysql_init(mysql))==NULL)
7 {
8 fprintf(stderr,"Cannot initialize MySQL");
9 return 1;
10 }
11 if(mysql_real_connect(mysql,"localhost","kerry","beck123",NULL,0,NULL,0)==NULL)
12 {
13 fprintf(stderr,"%d:%s \n",mysql_errno(mysql),mysql_error(mysql));
14 return 1;
15 }
16 printf("Succeed!\n");
17 return 0;
18 }

 

MySQL的c API有几个重要的数据类型:

  •  MYSQL

    该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用

  • MYSQL_RES

    该结构代表返回行的查询结果(SELECTSHOWDESCRIBEEXPLAIN)。在本节的剩余部分,将查询返回的信息称为“结果集”。

  •  MYSQL_ROW

    这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据,不能将其当作由Null终结的字符串对待,这是因为这类值可能会包含Null字节)。行是通过调用mysql_fetch_row()获得的。

  •  MYSQL_FIELD

    该结构包含关于字段的信息,如字段名、类型和大小。这里详细介绍了其成员。通过重复调用mysql_fetch_field(),可为每个字段获得MYSQL_FIELD结构。字段值不是该结构的组成部份,它们包含在MYSQL_ROW结构中。

  •  MYSQL_FIELD_OFFSET

    这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号,从0开始。



声明“MYSQL *mysql=NULL;“,必须为该指针赋值为NULL。如果定义为"MYSQL *mysql;",不为该指针赋值,就会生成野指针,程序运行时会发生“段错误 (核心已转储)“错误。

“野指针”不是NULL指针,是指向“垃圾”内存(不可用内存)的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if无法判断一个指针是正常指针还是“野指针”。有个良好的编程习惯是避免“野指针”的唯一方法。

 

调用mysql_init()函数,该函数会分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysqlNULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。