首先先介绍以下代码会用到的Mysql C API(http://dev.mysql.com/doc/refman/5.1/zh/apis.html#c)
(1)MYSQL *mysql_init(MYSQL *mysql)
分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。
返回值:初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。
错误:在内存不足的情况下,返回NULL。
(2)MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
第1个参数应是已有MYSQL结构的地址。调用mysql_real_connect()之前,必须调用mysql_init()来初始化MYSQL结构。
“host”的值必须是主机名或IP地址。如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。
“user”参数包含用户的MySQL登录ID。如果“user”是NULL或空字符串"",用户将被视为当前用户。
“passwd”参数包含用户的密码。
“db”是数据库名称。
如果“port”不是0,其值将用作TCP/IP连接的端口号。
如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。
client_flag的值通常为0.
返回值:如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。
(3)int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
执行由“query”指向的SQL查询,它应是字符串长度字节“long”。正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含由分号隔开的多条语句。对于包含二进制数据的查询,必须使用mysql_real_query()而不是mysql_query(),这是因为,二进制数据可能会包含‘\0’字符。此外,mysql_real_query()比mysql_query()快,这是因为它不会在查询字符串上调用strlen()。
返回值:如果查询成功,返回0。如果出现错误,返回非0值。
详见:http://dev.mysql.com/doc/refman/5.1/zh/apis.html#mysql-real-query
#include <stdio.h>
#include <mysql.h>
#include <string.h>
void main(void)
{
MYSQL *t_mysql;
char create[] = "create table stu(name varchar(30),stunum int)";
char insert[] = "insert into stu values('chris', 3306)";
char select[] = "select * from stu";
t_mysql = mysql_init(NULL);
if(NULL == t_mysql)
printf("init failed\n");
if(NULL == mysql_real_connect(t_mysql, "localhost", NULL, "", "test",
3306, NULL, 0))
printf("connect failed\n");
if(mysql_real_query(t_mysql, create, strlen(create)) != 0)
printf("create failed\n");
if(mysql_real_query(t_mysql, insert, strlen(insert)) != 0)
printf("insert failed\n");
}
用此gcc -o t test.c -Iusr/include/mysql -lmysqlclient命令编译,会出现错误:fatal error: mysql.h: 没有那个文件或目录
经查询是缺少libmysqlclient-dev
安装:sudo apt-get install libmysqlclient-dev
再编译,成功。
运行之后进入Mysql
mysql> select * from stu;
+-------+--------+
| name | stunum |
+-------+--------+
| chris | 3306 |
+-------+--------+
1 row in set (0.00 sec)
结果正确。
初次使用Mysql,还有很多不明之处!