您的位置:首页 > 运维架构 > Linux

Linux c操作mysql数据库

2016-02-21 18:13 302 查看
【启动mysql服务】

Service mysql start

【启动mysql登陆】

mysql -u root –p

 

添加一个用户

Create database db1 character set utf8;

grant all on db1.* to dbuser1 identified by 'dbuser1';//将db1下的所有数据授权给dbuser1,密码为dbuser1

用该用户登陆

mysql -u dbuser1 –p

 

在头文件目录里没有mysql.h头文件

ubuntu下:audo apt-get install libmysqlclient-dev

centos下 : yum install mysql-devel

 

头文件的名字是以/usr/include为基路径,往后加上所在<路径名/文件名.h>

如#include<sys/stat.h>

 

Makefile文件中连接时加上-mysqlclient 意思是要连接到libmysqlclient.so这个库

 

Mysql的client与server也是TCP协议

1, 初始化client

2, 建立连接

3, 接收和交互

 

数据库操作步骤与函数:

1,

MYSQL mysql;

//初始化mysql对象,相当于初始化了一个TCP的socket对象,同时初始化sql的内存和一些结构

mysql_init(&mysql);

 

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_real_connect()之前,你必须调用mysql_init()初始化MYSQL结构。见下面的例子。

 

• host值可以是一个主机名或一个IP地址。如果host是NULL或字符串"localhost",假定是到本地主机的一个连接。如果OS支持套接字(Unix)或命名管道(Win32),使用他们而不是TCP/IP与服务器连接。

 

• user参数包含用户的MySQL登录ID。如果user是NULL,假定是当前用户。在Unix下,它是当前登录名。在Windows ODBC下,必须明确地指定当前用户名字。见16.4 怎样填写ODBC管理程序中各种域。

 

• passwd参数为user包含口令。如果passwd是NULL,只有在user表中对于有一个空白口令字段的用户的条目将被检查一个匹配。这允许数据库主管设置MySQL权限,使用户获得不同的口令,取决于他们是否已经指定一个口令。注意:不要试图在调用mysql_real_connect()前加密口令;口令加密自动被客户API处理。

 

• db是数据库名。如果db不是NULL,连接将缺省数据库设置为这个值。

 

• 如果port不是0,值对于TCP/IP连接将用作端口号。注意host参数决定连接的类型。

 

• 如果unix_socket不是NULL,
4000
字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型。

 

• client_flag值通常是0,但是在很特殊的情况下可以被设置为下列标志的组合:

标志名字 意味着的标志

CLIENT_FOUND_ROWS 返回找到的(匹配的)行数,不是受到影响的行数。

CLIENT_NO_SCHEMA 不允许db_name.tbl_name.col_name语法。这是为了ODBC;如果你使用该语法,导致语法分析器产生一个错误,它是为在一些ODBC程序捕捉错误是有用的。

CLIENT_COMPRESS 使用压缩协议。

CLIENT_ODBC 客户是一个ODBC客户。这使mysqld变得对ODBC更友好。

2.1.3 返回值

如果连接成功,一个 MYSQL*连接句柄。如果连接失败,NULL。对一个成功的连接,返回值与第一个参数值相同,除非你传递NULL给该参数。

例:

pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",

"db1", 0, 0, 0);

if (pconnection == NULL)

{

fprintf(stderr, "%s", "mysqlerror\n");

exit(1);

}

打印错误:

mysql_error(&mysql);

例:

pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",

"db1", 0, 0, 0);

if (pconnection == NULL)

{

perror(mysql_error(&mysql));

exit(1);

}

关闭连接:

mysql_close(pconnction);

 

执行sql语句:

int mysql_query(MYSQL* mysql,const char* sql);

mysql:连接的指针

sql:sql语句

返回:成功返回0,失败返回非0

执行之前必须先设置字符集,包括文件的编码。

 

注:system(sty erase ^H); //设置控制台退格不回显

例:

int main(int argc, char* argv[])

{

MYSQL mysql, *pconnection;

//初始化mysql对象,相当于初始化了一个TCP的socket对象

mysql_init(&mysql);

pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",

"db1", 0, 0, 0);

if (pconnection == NULL)

ERR_EXIT(mysql_error(&mysql));

//确保客户端与server字符集相同,不然会出现程序出现汉字并且作为where条件,不识别也不报错

int ret = mysql_query(pconnection, "set names utf8");

if (ret != 0)

ERR_EXIT(mysql_error(&mysql));

// char *sql = "delete from people where id >15";

char *con = argv[1];

char p[10];

char name[100];

memset(name,0,sizeof(name));

memset(p,0,sizeof(p));

printf("请输入条件1:");

//read(STDIN_FILENO,name,sizeof(name));

fgets(p,sizeof(p),stdin);

p[strlen(p)-1]=0;//将最后一位\n设为NULL(因为你再输入后敲了个回车)

printf("请输入条件2:");

fgets(name,sizeof(name),stdin);

name[strlen(name)-1]=0;

char sql[1024];

memset(sql,0,sizeof(sql));

sprintf(sql,"delete from people where %s%s'%s'",con,p,name);

printf("%s\n",sql);

ret = mysql_query(pconnection, sql);

if (ret != 0)

ERR_EXIT(mysql_error(&mysql));

mysql_close(pconnection);

return 0;

}

查询语句:

MYSQL_RES  *mysql_store_result(MYSQL *pmysql);

pmysql:打开的连接指针

成功返回一个查询结果指针,失败或查询无结果返回NULL(不能用其判断查询结果为空)

 

查看查询结果:

MYSQL_ROW  mysql_fetch_row(MYSQL_RES  * result);

 

查看查询结果中的字段信息:

MYSQL_FIELD *mysql_fetch_field(MYSQL_RES  * result);

 

释放查询资源:

mysql_free_result(MYSQL_RES* pres);//调用完mysql_store_result一定要用其释放资源

 

例:查询

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <mysql/mysql.h>

#define ERR_EXIT(m)\

do {perror(m);\

exit(EXIT_FAILURE);\

} while(0)

int main(int argc, char* argv[])

{

MYSQL mysql, *pconnection;

//初始化mysql对象,相当于初始化了一个TCP的socket对象

mysql_init(&mysql);

pconnection = mysql_real_connect(&mysql, "localhost", "dbuser1", "dbuser1",

"db1", 0, 0, 0);

if (pconnection == NULL)

ERR_EXIT(mysql_error(&mysql));

//确保客户端与server字符集相同,不然会出现程序出现汉字并且作为where条件,不识别也不报错

int ret = mysql_query(pconnection, "set names utf8");

if (ret != 0)

ERR_EXIT(mysql_error(&mysql));

char *sql = "select * from people";

ret = mysql_query(pconnection, sql);

if (ret != 0)

ERR_EXIT(mysql_error(&mysql));

 

MYSQL_RES *result;

result = mysql_store_result(pconnection);

//查询字段

MYSQL_FIELD *field;

int count = 0;

while (1)

{

field = mysql_fetch_field(result);

if (field == NULL)

break;

printf("%s\t",field->name);

count++;

}

printf("\n");

//查询记录

MYSQL_ROW row;

while (1)

{

row = mysql_fetch_row(result);

if (row == NULL)

break;

int i;

for(i = 0; i < count ;i++)

printf("%s\t", row[i]);

printf("\n");

}

 

mysql_free_result(result);

mysql_close(pconnection);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息