标签:
首先安装mysql数据库及其动态链接库,
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
安装过程很简单,根据提示安装即可
有一些对象我们要先知道一下
MYSQL :结构体,是我们连接数据库,操作数据库重要的对象
typedef struct st_mysql
{
NET net; /* Communication parameters 通讯参数,网络相关*/
unsigned char *connector_fd; /* ConnectorFd for SSL 加密套接字协议层*/
char *host,*user,*passwd,*unix_socket,*server_version,*host_info; /*数据库用户名,密码,主机名,Unix套接字,版本,主机信息*/
char *info, *db;
struct charset_info_st *charset;
MYSQL_FIELD *fields; /*字段列表*/
MEM_ROOT field_alloc;
my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR 下一条记录的ID*/
my_ulonglong extra_info; /* Not used 未使用*/
unsigned long thread_id; /* Id for connection in server 数据库服务器中的连接ID*/
unsigned long packet_length;
unsigned int port; /*端口*/
unsigned long client_flag,server_capabilities; /*客户端状态,服务器服务*/
unsigned int protocol_version; /*协议版本*/
unsigned int field_count; /*字段个数*/
unsigned int server_status; /*数据库状态*/
unsigned int server_language; /*数据库语言*/
unsigned int warning_count; /*错误条数*/
struct st_mysql_options options; /*后续学习*/
enum mysql_status status;
my_bool free_me; /* If free in mysql_close 是否关闭*/
my_bool reconnect; /* set to 1 if automatic reconnect 是否自动连接*/
/* session-wide random string */
char scramble[SCRAMBLE_LENGTH+1];
/*
Set if this is the original connection, not a master or a slave we have
added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
*/
my_bool rpl_pivot;
/*
Pointers to the master, and the next slave connections, points to
itself if lone connection.
*/
struct st_mysql* master, *next_slave; /*系统数据库,自定义数据哭*/
struct st_mysql* last_used_slave; /* needed for round-robin slave pick 端节点数据库*/
/* needed for send/read/store/use result to work correctly with replication */
struct st_mysql* last_used_con; /*最后一个连接*/
LIST *stmts; /* list of all statements 执行语句*/
const struct st_mysql_methods *methods; /*所有方法*/
void *thd;
/*
Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag
from mysql_stmt_close if close had to cancel result set of this object.
*/
my_bool *unbuffered_fetch_owner;
/* needed for embedded server - no net buffer to store the ‘info‘ */
char *info_buffer;
void *extension;
} MYSQL;
MYSQL_RES:结构体,保存数据库返回的结果
typedef struct st_mysql_res {
my_ulonglong row_count; /*记录条数*/
MYSQL_FIELD *fields; /*字段列表*/
MYSQL_DATA *data; /*当前行的数据*/
MYSQL_ROWS *data_cursor; /*下条记录*/
unsigned long *lengths; /* column lengths of current row 当前行的长度*/
MYSQL *handle; /* for unbuffered reads 待续*/
const struct st_mysql_methods *methods; /*方法*/
MYSQL_ROW row; /* If unbuffered read 下条将行缓存的行*/
MYSQL_ROW current_row; /* buffer to current row 当前行*/
MEM_ROOT field_alloc; /*内存相关 待续*/
unsigned int field_count, current_field; /*字段个数,当前字段*/
my_bool eof; /* Used by mysql_fetch_row 是否是最后一条记录*/
/* mysql_stmt_close() had to cancel this result */
my_bool unbuffered_fetch_cancelled;
void *extension;
} MYSQL_RES;
MYSQL_ROW:结构体,返回的结果的单行数据
typedef char **MYSQL_ROW
然后就是一些函数来进行操作所有头文件均为<mysql/mysql.h>
MYSQL *mysql_init(MYSQL *mysql);
初始化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 long client_flag)
初始化MYSQL对象以后进行连接数据库
参数:
MYSQL *mysql:上面初始化以后的MYSQL对象指针
const char *host:数据库的地址
const char *user:数据库登陆的用户名
const char *passwd:该用户的密码
const char *db:登陆的数据库名称
unsigned int port:端口号,根据host类型来决定,如果是本地的则为0
const char *unix_socket:网络类型,本地为NULL
unsigned long client_flag:连接属性,通常为0.
以下是client_flag的取值:
const char *mysql_error(MYSQL *mysql)
输出错误信息
int mysql_query(MYSQL *mysql, const char *stmt_str)
用于执行sql语句,第二个参数就是sql语句,语句中不能以";"结尾,如果是多条语句用分号隔开.
返回值:
成功:0
错误返回错误码
可以使用mysql_error()函数查看错误详情
MYSQL_RES *mysql_use_result(MYSQL *mysql)
返回查询结果
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
读取结果集中的下一行数据,返回为NULL时表示所有的数据经读取完了
unsigned int mysql_num_fields(MYSQL_RES *result)
返回结果集的行数
void mysql_close(MYSQL *mysql)
关闭连接,释放空间
void mysql_free_result(MYSQL_RES *result)
释放结果集的空间
更多的函数可以查看官方文档,写的非常的详细
简单的代码
/**我觉得这个代码够简单了,所以就不写注释了*/ #include <mysql.h> #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]){ MYSQL *conn = NULL; MYSQL_RES *res = NULL; MYSQL_ROW row = NULL; char server_addr[] = "localhost"; char user[] = "root"; char password[] = "123"; char database[] = "test"; conn = mysql_init(NULL); mysql_real_connect(conn,server_addr,user,password,database,0,NULL,0); if(conn == NULL){ perror(mysql_error(conn)); exit(1); } if(mysql_query(conn,"show tables")){ perror(mysql_error(conn)); exit(1); } res = mysql_use_result(conn); while( ( row = mysql_fetch_row(res) ) != NULL ){ printf("%s\n",row[0]); } mysql_free_result(res); mysql_close(conn); return 0; }
标签:
原文地址:http://www.cnblogs.com/CHYI1/p/5581268.html