现在换成了C++的工具,就只能用C++导入了。
环境
- Centos 7
- gcc 4.8
开始
如果是windows,需要导入一些lib之类的。
linux下好像直接安装库就行了yum install -y mysql-devel
。
然后引入头文件#incldude <mysql/mmysql.h>
。
创建一个数据库测试用
CREATE DATABASE c_test;
use c_test;
INSERT INTO a values('1234',13);
基础
最基本的连接程序
#include <stdio.h>
#include <mysql/mysql.h>
int main(){
MYSQL *ConnectPointer=mysql_init(NULL);
ConnectPointer=mysql_real_connect(ConnectPointer,"127.0.0.1","root","root","c_test",0,NULL,0);
if (ConnectPointer){
printf("connect database successfully\n");
}else{
printf("failed to connect database\n");
}
mysql_close(ConnectPointer);
printf("database connection closed successfully\n");
printf("\n");
return 0;
}
在编译的时候需要加一点参数,指定用到的库,这个位置可以通过locate mysql.h和locate mysqlclient等
得到。
gcc main.c -lmysqlclient -I/usr/include/mysql -L/usr/lib64/mysql
然后执行./a.out>可以看到结果
[root@controller c]# gcc main.c -lm -lmysqlclient -I/usr/include/mysql -L/usr/lib64/mysql
[root@controller c]# ./a.out
connect database successfully
database connection closed successfully
可以写一个MAKEFILE
方便编译,然后make
就行了。
CC=g++ #编译器
CFLAGS=-g #可以使用gdb调试
BIN=MicroChatServer #生成的可执行目标文件名
OBJS=sysutil.o #.c/.cpp文件对应的.o目标文件
LIBS=-I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -ljsoncpp -lpthread #链接库
$(BIN):$(OBJS)
$(CC) $(CFLAGS) $^ -o $@ $(LIBS)
%.o:%.cpp
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean #清理所有目标文件和可执行文件
clean:
rm -f *.o $(BIN)
比基础高级一点
这里我需要查询表中的数据,然后我发现如果使用MYSQL *conn_ptr
,指针的话,会有一些地方报错,因为上一个我没搞清楚参数的问题。
MYSQL
变量可以是正常的变量p
也可以是指针*p
。
- 如果是正常的,后面的各种方法中第一个参数都必须是
&p
- 如果是指针,那第一个参数直接传入
p
就行了
因为第一个参数类型好象是一个*
指针,我第一次弄的时候定义的是指针,传入的参数还是个地址,就是**
了,然后就报错了,这块注意一下。
查询
流程大致是:
- 获取
MYSQL
变量 - 初始化
mysql_init()
并连接mysql_real_connect()
- 构造执行语句变量
- 执行语句
mysql_query()
- 获取数据
mysql_store_result()
- 逐行分析
mysql_fetch_row()
#include <stdio.h>
#include <mysql/mysql.h>
int main(){
char SelectAllExec[]="select * from a";
int ResultNum=0;
MYSQL_RES *Result;
MYSQL_ROW Row;
MYSQL ConnectPointer;
mysql_init(&ConnectPointer);
mysql_real_connect(&ConnectPointer,"127.0.0.1","root","root","c_test",0,NULL,0);
if (&ConnectPointer)