首先先介紹以下代碼會用到的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,還有很多不明之處!