linux 下 用c语言创建mysql数据库笔记(一)
在引用头文件时必须包含‘mysql.h’的头文件(必须是mysql.h的绝对地址,一般在mysql下的include目录下,仔细看看你的在哪里?*),
---- 对其中几个函数作简单说明,详细说明,可参考MySQL文档:
---- 1. MYSQL *mysql_init(MYSQL *mysql)
---- 初始化一个类型为MYSQL的数据结构,为执行mysql_real_connect()做准备。参数
mysql为指向该结构的指针,如果mysql为NULL,则新建并初始化一个MYSQL的数据结构。
新建的结构将在mysql_close()中释放。
---- 若成功,返回初始化的MYSQL数据结构的指针,否则返回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 int client_flag)
---- 与MySQL数据库引擎建立连接。在执行进一步的数据操作之前,必须保证mysql_re
al_connect()成功返回。
---- 参数mysql是mysql_init()的返回值;
---- 参数host是运行MySQL数据库引擎的机器的TCP/IP主机名,如为NULL则默认为“lo
calhost”;
---- 参数user和passwd是MySQL数据库的合法用户和口令;
---- 参数db是连接的数据库名;
---- 参数port,unix_socket和client_flag一般取默认值。
---- 3. int mysql_query(MYSQL *mysql, const char *query)
---- 执行query字符串中的SQL语句,query必须以0结尾。如果成功,返回0。
---- 4. MYSQL_RES *mysql_store_result(MYSQL *mysql)
---- 返回SELECT,SHOW,DESCRIBE, EXPLAIN等语句执行的结果。函数新建一个MYSQL_
RES的数据结构,把结果存储在该结构中。如果查询没有匹配的结果,则返回空数据集。
处理完结果集后,必须调用mysql_free_result()。
---- 如果出错,返回NULL,否则返回MYSQL_RES结构的指针。
---- 5. MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
---- 取回结果集中的下一条记录,如果没有记录或出错,返回NULL。一条记录中的字段
数可以用mysql_num_fields(result)获得,各字段的值可以用row[0] 到 row[mysql_nu
m_fields(result)-1]的数组来访问。
范例:链接MySQL
#include
#include
#include
int main()
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
char server[] = "localhost";
char user[] = "root";
char password[] = "123456";
char database[] = "mysql";
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
if (mysql_query(conn, "show tables"))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) != NULL)
{
printf("%s \n", row[0]);
}
mysql_free_result(res);
mysql_close(conn);
printf("finish! \n");
return 0;
}
终端运行:
xb@ubuntu:~/xb/mysql$ vi mysql_test.c
xb@ubuntu:~/xb/mysql$ gcc mysql_test.c -Wall -lmysqlclient
xb@ubuntu:~/xb/mysql$ ./a.out
MySQL Tables in mysql database:
columns_priv
db
event
func
general_log
help_category
help_keyword
help_relation
help_topic
host
ndb_binlog_index
plugin
proc
procs_priv
proxies_priv
servers
slow_log
tables_priv
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
user
finish!
xb@ubuntu:~/xb/mysql$
范例二:建表
#include
#include
#include
int main()
{
MYSQL *conn;
char server[] = "localhost";
char user[] = "root";
char password[] = "123456";
char database[] = "mysql";
char sql_create[] = "CREATE TABLE if not exists testdb.cart(id int, name varchar(20), price float);";
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
// if (mysql_query(conn, " create database testdb"))
if (mysql_query(conn, sql_create))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
mysql_close(conn);
printf("finish! \n");
return 0;
}
终端运行:
检查数据库中有无此表:
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| aaa |
| cart |
| ccc |
| ddd |
+------------------+
4 rows in set (0.00 sec)
mysql> describe cart;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| price | float | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.06 sec)
范例三:插入数据
#include
#include
#include
int main()
{
MYSQL_ROW row;
char server[] = "localhost";
char user[] = "root";
char password[] = "123456";
char database[] = "mysql";
char sql_insert[] = "INSERT INTO testdb.cart(id, name, price) VALUES(1,' apple', 12.6);";
char sql_select[] = "SELECT * FROM testdb.cart;";
MYSQL *conn = mysql_init(NULL);
if (!mysql_real_connect(conn, server,user, password, database, 0, NULL, 0))
{
fprintf(stderr, "%s\n", mysql_error(conn));
}
if (mysql_query(conn, sql_insert))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
if (mysql_query(conn, sql_select))
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
MYSQL_RES *res = mysql_use_result(conn);
while ((row = mysql_fetch_row(res)) != NULL)
{
printf("%s \n", row[0]);
}
mysql_close(conn);
printf("finish! \n");
return 0;
}
终端运行:
xb@ubuntu:~/xb/mysql$ vi mysql_create.c
xb@ubuntu:~/xb/mysql$ gcc mysql_create.c -Wall -lmysqlclient
xb@ubuntu:~/xb/mysql$ ./a.out
1
finish!
xb@ubuntu:~/xb/mysql$
数据库验证:
mysql> select * from cart;
+------+-------+-------+
| id | name | price |
+------+-------+-------+
| 1 | apple | 12.6 |
+------+-------+-------+
1 row in set (0.00 sec)
范例三:查询
#include
#include
#include
int main(void)
{
MYSQL *conn_ptr;
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;
// MYSQL_FIELD *fd;
int res, i, j;
conn_ptr = mysql_init(NULL);
if (!conn_ptr) {
return EXIT_FAILURE;
}
conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root", "123456", " mysql", 0, NULL, 0);
if (conn_ptr) {
res = mysql_query(conn_ptr, "SELECT * FROM testdb.cart"); //查询语句
if (res) {
printf("SELECT error:%s\n",mysql_error(conn_ptr));
} else {
res_ptr = mysql_store_result(conn_ptr); //取出结果集
if(res_ptr) {
printf("%lu Rows\n",(unsigned long)mysql_num_rows(res_ptr));
j = mysql_num_fields(res_ptr);
while((sqlrow = mysql_fetch_row(res_ptr))) { //依次取出记
录
for(i = 0; i < j; i++)
printf("%s\t", sqlrow[i]); //输出
printf("\n");
}
if (mysql_errno(conn_ptr)) {
// fprintf(stderr, "Retrive error:s\n", mysql_error(conn_ ptr));
}
}
mysql_free_result(res_ptr);
}
} else {
printf("Connection failed\n");
}
mysql_close(conn_ptr);
return EXIT_SUCCESS;
}
终端运行:
xb@ubuntu:~/xb/mysql$ vi mysql_select.c
xb@ubuntu:~/xb/mysql$ gcc mysql_select.c -Wall -lmysqlclient
xb@ubuntu:~/xb/mysql$ ./a.out
2 Rows
1 apple 12.6
2 pear 8.8
xb@ubuntu:~/xb/mysql$