Linux C MySQL语句

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 <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
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 <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
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 <mysql/mysql.h>
#include <stdio.h>
#include <stdlib.h>
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 
finish! 
xb@ubuntu:~/xb/mysql$ 
 
数据库验证:
mysql> select * from cart;
+------+-------+-------+
| id   | name  | price |
+------+-------+-------+
|    1 | apple |  12.6 |
+------+-------+-------+
1 row in set (0.00 sec)

 

范例三:查询

#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
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$ 

 

 

posted @ 2018-12-10 17:45  止动  阅读(616)  评论(0编辑  收藏  举报