C语言下用MySQL对数据库操作
2017-09-18 13:34
260 查看
标签:工程
命令行编译,使用下面的命令
参数在Linux环境下可以写到
windows下据说可以加这几行预编译
函数原型:
函数返回值:一个被始化的
备注:在内存不足的情况下,返回NULL
函数原型:
函数传入值:MYSQL:类型的指针
函数返回值:无
函数原型:
函数传入值:
函数返回值:如果连接成功,一个
备注:该函数不推荐,使用
函数原型:
函数传入值:
函数返回值:如果连接成功,一
函数原型:
函数传入值:
函数返回值:执行成功则返回受影响的行的数。如果上一次查询失败的话,函数返回-1。
函数原型:
函数传入值:
函数返回值:如果查询成功,为零,出错为非零。
相关函数:
函数原形:
函数传入值:
函数返回值:
函数原形:
函数传入值:
函数返回值:下一行的
函数原形:
函数传入值:
函数返回值:结果集合中字段数量的一个无符号整数
函数原形:
函数传入值:
函数返回值:如果数据库成功地被创建,返回零,如果发生错误,为非零。
函数原形:
函数传入值:
函数返回值:如果数据库成功地被创建,返回零,如果发生错误,为非零。
下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。
编译环境
需要头文件#include <mysql/mysql.h>
命令行编译,使用下面的命令
gcc test.c -o test -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm)
参数在Linux环境下可以写到
Makefile文件里
#Makefile 注意要写第6行,其他的视文件名而定。 OBJS = yhsw.o tea_c.o tea_util_c.o CC = gcc CFLAGS=-Wall $(shell mysql_config --libs) $(shell mysql_config --cflags) #CFLAGS+=-lm phone_auth:$(OBJS) $(CC) $(OBJS) -o phone_auth -lm $(CFLAGS) yhsw.o:yhsw.c yhsw.h tea_util_c.h $(CC) $(CFLAGS) -c yhsw.c tea_c.o:tea_c.c tea_util_c.h $(CC) $(CFLAGS) -c tea_c.c tea_util_c.o:tea_util_c.c tea_util_c.h $(CC) $(CFLAGS) -c tea_util_c.c clean: rm *.o rm phone_auth
windows下据说可以加这几行预编译
#if defined(_WIN32) || defined(_WIN64)//为了支持windows平台上的编译 #include <windows.h> #endif
系统库里的结构体
在头文件下一些关于数据库的结构体已经隐含了,在实例化以后即可使用。st_mysql/MYSQL
typedef struct st_mysql { NET net; /* Communication parameters */ gptr connector_fd; /* ConnectorFd for SSL */ char *host,*user,*passwd,*unix_socket, *server_version,*host_info,*info,*db; unsigned intport,client_flag,server_capabilities; unsigned intprotocol_version; unsigned intfield_count; unsigned intserver_status; unsigned long thread_id; /* Id for connection in server */ my_ulonglong affected_rows; my_ulonglong insert_id; /* id if insert on table with NEXTNR */ my_ulonglong extra_info; /* Used by mysqlshow */ unsigned long packet_length; enum mysql_status status; MYSQL_FIELD *fields; MEM_ROOT field_alloc; my_bool free_me; /* If free in mysql_close */ my_bool reconnect; /* set to 1 if automatic reconnect */ struct st_mysql_options options; char scramble_buff[9]; struct charset_info_st *charset; unsigned intserver_language; } MYSQL;
st_mysql_res/MYSQL_RES
这个结构代表一个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的返回结果。返回的数据称为“数据集”,通过它从数据库读取数据。typedef struct st_mysql_res { my_ulonglong row_count; unsigned intfield_count, current_field; MYSQL_FIELD *fields; MYSQL_DATA *data; MYSQL_ROWS *data_cursor; MEM_ROOT field_alloc; MYSQL_ROW row; /* If unbuffered read */ MYSQL_ROW current_row; /* buffer to current row */ unsigned long *lengths; /* column lengths of current row */ MYSQL *handle; /* for unbuffered reads */ my_bool eof; /* Used my mysql_fetch_row */ } MYSQL_RES;
常用函数
mysql_init
函数功能:获得或初始化一个MYSQL结构函数原型:
MYSQL *mysql_init(MYSQL *mysql)
函数返回值:一个被始化的
MYSQL*句柄
备注:在内存不足的情况下,返回NULL
mysql_close
函数功能:关闭一个服务器连接,并释放与连接相关的内存函数原型:
void mysql_close(MYSQL *mysql)
函数传入值:MYSQL:类型的指针
函数返回值:无
mysql_connect
函数功能:连接一个MySQL服务器函数原型:
MYSQL * mysql_connect
(MYSQL *mysql,const char *host,const char *user,const char *passwd);
函数传入值:
mysql表示一个现存mysql结构的地址
host表示MYSQL服务器的主机名或IP
user表示登录的用户名
passwd表示登录的密码
函数返回值:如果连接成功,一个
MYSQL *连接句柄;如果连接失败,NULL
备注:该函数不推荐,使用
mysql_real_connect()代替
mysql_real_connect
函数功能:连接一个MySQL服务器函数原型:
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结构的地址
host表示MYSQL服务器的主机名或IP
user表示登录的用户名
passwd表示登录的密码
db表示要连接的数据库
port表示MySQL服务器的TCP/IP端口
unix_socket表示连接类型
client_flag表示MySQL运行ODBC数据库的标记
函数返回值:如果连接成功,一
个MYSQL*连接句柄:如果连接失败,NULL
mysql_affected_rows
函数功能:返回最新的UPDATE,DELETE或INSERT查询影响的行数函数原型:
int mysql_affected_rows(MYSQL* mysql)
函数传入值:
MYSQL*
函数返回值:执行成功则返回受影响的行的数。如果上一次查询失败的话,函数返回-1。
mysql_query
函数功能:对指定的连接执行查询函数原型:
int mysql_query(MYSQL *mysql, const char *query);
函数传入值:
query表示执行的SQL语句,最后不必加分号
函数返回值:如果查询成功,为零,出错为非零。
相关函数:
int mysql_real_query(MYSQL *mysql, const char *query, unsigned int length)
mysql_use_result
函数功能:为无缓冲的结果集获得结果标识符函数原形:
MYSQL_RES *mysql_use_result(MYSQL *mysql);
函数传入值:
MYSQL*
函数返回值:
MYSQL_RES*,如果发生一个错误发NULL
mysql_fetch_row
函数功能:检索一个结果集合的下一行函数原形:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
函数传入值:
MYSQL_RES*
函数返回值:下一行的
MYSQL_RES*。如果没有更多的行可检索或如果出现一个错误,NULL
mysql_num_fields
函数功能:返回指定结果集中列的数量函数原形:
unsigned int mysql_num_fields(MYSQL_RES *res);
函数传入值:
MYSQL_RES*
函数返回值:结果集合中字段数量的一个无符号整数
mysql_create_db
函数功能:创建一个数据库函数原形:
int mysql_create_db(MYSQL *mysql,const char *db);
函数传入值:
MYSQL_RES*
db要创建的数据库名
函数返回值:如果数据库成功地被创建,返回零,如果发生错误,为非零。
mysql_select_db
函数功能:选择一个数据库函数原形:
int mysql_select_db(MYSQL *mysql,const char *db);
函数传入值:
MYSQL*
db要创建的数据库名
函数返回值:如果数据库成功地被创建,返回零,如果发生错误,为非零。
EXAMPLE
这里的大部分代码参考了MySQL发行包里面的.c源文件。下面这段代码实现了连接到本地MySQL服务器上9tmd_bbs_utf8数据库,从数据表tbb_user中根据输入的userid取得该用户的用户名并打印输出到终端。
#include <stdio.h> #include <mysql.h> #include <string.h> int main() { MYSQL *t_mysql; MYSQL_RES *res; MYSQL_FIELD *fd; MYSQL_ROW row; char select[] = "select * from ca_device where mac = '58:69:6C:32:F9:1C'"; printf("start init\n"); t_mysql = mysql_init(NULL); if(t_mysql == NULL) { printf("init failed\n"); return 1; } printf("start connect\n"); if(mysql_real_connect(t_mysql, "88.88.88.88", "username", "password", "dbname", 0, NULL, 0) == NULL) { printf("connect failed\n"); return 1; } printf("start select\n"); if(mysql_real_query(t_mysql, select, strlen(select))) { printf("insert failed\n"); return 1; } if(!(res = mysql_store_result(t_mysql))) { printf("store failed\n"); return 1; } int col = mysql_num_fields(res), i; printf("number of fields returned: %d\n", col); int sum = 10; while(row = mysql_fetch_row(res)) { for(i = 0;i < col;i++) printf("%s ", row[i]); printf("\n"); if(sum-- == 0) break; } // 开心地遍历出10条数据 mysql_close(t_mysql); return 0; }
相关文章推荐
- linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql
- linux安装mysql和使用c语言操作数据库的方法 c语言连接mysql
- 利用mysql提供的c语言接口操作数据库
- 利用mysql提供的c语言接口操作数据库
- C语言也能做大事;MYSQL简单的数据库操作;
- c语言操作mysql和数据库基本操作
- MySQL操作数据库命令汇总之windows 命令行使用
- mysql 数据库的基本操作
- mysql之sql语句-数据库、表结构相关的基础操作
- mysql 数据库事务未提交,导致无法操作库;
- C语言操作mysql数据 常用函数
- 八、PYTHON数据库MYSQL的操作
- 数据库游标使用mysql(全表操作)
- c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)
- 【SQL】JDBC之与数据库MySQL的连接以及增删改查等操作
- MySQL操作数据库和表的常用命令新手教程
- Linux下C语言学习笔记—操作MySQL
- Linux 环境 C语言 操作MySql 的接口范例
- sqlite嵌入式数据库C语言基本操作(1)
- MYSQL 操作多个数据库