面向对象-mysql编程(root)

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;
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值