1、打印错误信息
1、mysql_error() 参数是mysql对象
2、连接和关闭服务器
1、MYSQL *mysql_init(MYSQL *mysql)
描述
分配或初始化与mysql_real_connect()相适应的MYSQL对象。 如果mysql是NULL指针, 该函数将分配、初始化、并返回新对象。
否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对
象。
返回值
初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。
错误
在内存不足的情况下,返回NULL。
2、mysql_real_connect()
#include <iostream>
#include <mysql/mysql.h>
using namespace std;
MYSQL *Init()
{
MYSQL *m;
m = mysql_init(NULL); //创建mysql对象,并且初始化,返回对象的地址
if(m == NULL)
{
return NULL;
}
m = mysql_real_connect(m,"localhost","root","root","mydatabase",0,NULL,0);
if(NULL == m)
{
return NULL;
}
return m;
}
int main()
{
MYSQL *mysql; //创建mysql对象
mysql = Init();
if(NULL == mysql)
{
cout << "初始化mysql失败" << endl;
}
else
{
cout << "连接数据库成功" << endl;
}
return 0;
}
3、报错:找头文件 & g++ mysql.cpp -o mysql -lmysqlclient
头文件在/usr/include/mysql
(不是标准库中的函数,需要像多线程 编译时带上-xxx)
/usr/bin/ld: /tmp/cc6Pbs2W.o: in function `Init()':
mysql.cpp:(.text+0x12): undefined reference to `mysql_init'
/usr/bin/ld: mysql.cpp:(.text+0x59): undefined reference to `mysql_real_connect'
collect2: error: ld returned 1 exit status
q123@123:/mnt/hgfs/share/6、数据库$ find /usr/ -name "*mysql*.so"
/usr/lib/mysql/plugin/component_mysqlbackup.so
/usr/lib/mysql/plugin/mysql_clone.so
/usr/lib/mysql/plugin/mysql_no_login.so
/usr/lib/x86_64-linux-gnu/libmysqlclient.so
q123@123:/mnt/hgfs/share/6、数据库$ 去头去尾 头:lib 尾:.so 中间内容就是-l后面跟的内容^C
4、关闭服务器
void mysql_close(MYSQL *mysql)
描述
关闭前面打开的连接。如果句柄是由mysql_init()或mysql_connect()自动分配的,mysql_close()还将解除分配由mysql指向的连接句柄。
返回值
无。
错误
无。
3、表数据的增删改查
1、插入数据
mysql_query()
int mysql_query(MYSQL *mysql, const char *query)
字符串必须包含1条SQL语句
void InsertDataBase(MYSQL *m)
{
if(NULL == m)
{
return;
}
char sql[1024] = {0};
int id,age;
char name[32] = {0},birth[32] = {0},sex[32] = {0},tel[32] = {0};
cout << "请输入编号 姓名 出生日期 年龄 性别 电话" << endl;
cin >> id >> name >> birth >> age >> sex >> tel;
sprintf(sql,"insert into student (id,name,birth,age,sex,tel) values(%d,\"%s\",\"%s\",%d,\"%s\",\"%s\");",id,name,birth,age,sex,tel);
int ret = mysql_query(m,sql);
if(ret != 0 )
{
cout << mysql_error(m) << endl;
return;
}
cout << "插入成功" << endl;
}
2、查询、获取数据
1、查询数据
int ret = mysql_query(m,"select * from student;");
2、获取数据
MYSQL_RES *mysql_store_result(MYSQL *mysql)
3、获取字段(变量名个数)
unsigned int mysql_num_fields(MYSQL_RES *result)
要想传递MYSQL*参量取而代之,请使用无符号整数mysql_field_count(MYSQL *mysql)。
描述
返回结果集中的行数。
4、获取变量名(一次获取一个变量名,一个一个返回)(保存在结构体name中)
MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
描述
返回采用MYSQL_FIELD结构的结果集的列。 重复调用该函数,以检索关于结果集中所有列的信息。未剩余字段
时, mysql_fetch_field()返回NULL
5、获取一行数据(一次获取一行数据保存在数组中,一行里一个一个打印数据)
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
描述
检索结果集的下一行。在mysql_store_result()之后使用时,如果没有要检索的行, mysql_fetch_row()返回NULL。
在mysql_use_result()之后使用时, 如果没有要检索的行或出现了错误, mysql_fetch_row()返回NULL。
行内值的数目由mysql_num_fields(result)给出。如果行中保存了调用mysql_fetch_row()返回的值,将按
照row[0]到row[mysql_num_fields(result)-1],访问这些值的指针。行中的NULL值由NULL指针指明。
可以通过调用mysql_fetch_lengths()来获得行中字段值的长度。对于空字段以及包含NULL的字段,长度为0。通过检查字段值
的指针,能够区分它们。如果指针为NULL,字段为NULL,否则字段为空。
void FindDataBase(MYSQL *m)
{
if(m == NULL)
{
return;
}
int ret = mysql_query(m,"select * from student;");
if(ret != 0)
{
cout << mysql_error(m) << endl;
return;
}
MYSQL_RES *res = mysql_store_result(m); //获取查询到的结果
if(res == NULL)
{
cout << mysql_error(m) << endl;
return ;
}
//获取字段数
int field = mysql_num_fields(res);
//cout << field << endl;
MYSQL_FIELD *f; //f结构体
while(f = mysql_fetch_field(res))
{
cout << setw(20) << setiosflags(ios::left) << f->name; //打印字段名
}
cout << endl;
//获取每一条记录
MYSQL_ROW r; //数组
while(r = mysql_fetch_row(res))
{
for(int i = 0;i < field;i++)
{
cout << setw(20) << setiosflags(ios::left) << r[i];
}
cout << endl;
}
}