vc调用mysql数据库操作例子
这里归纳了C API可使用的函数
函数 |
描述 |
mysql_affected_rows() |
返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。 |
mysql_autocommit() |
切换 autocommit模式,ON/OFF |
mysql_change_user() |
更改打开连接上的用户和数据库。 |
mysql_charset_name() |
返回用于连接的默认字符集的名称。 |
mysql_close() |
关闭服务器连接。 |
mysql_commit() |
提交事务。 |
mysql_connect() |
连接到MySQL服务器。该函数已不再被重视,使用mysql_real_connect()取代。 |
mysql_create_db() |
创建数据库。该函数已不再被重视,使用SQL语句CREATE DATABASE取而代之。 |
mysql_data_seek() |
在查询结果集中查找属性行编号。 |
mysql_debug() |
用给定的字符串执行DBUG_PUSH。 |
mysql_drop_db() |
撤销数据库。该函数已不再被重视,使用SQL语句DROP DATABASE取而代之。 |
mysql_dump_debug_info() |
让服务器将调试信息写入日志。 |
mysql_eof() |
确定是否读取了结果集的最后一行。该函数已不再被重视,可以使用mysql_errno()或mysql_error()取而代之。 |
mysql_errno() |
返回上次调用的MySQL函数的错误编号。 |
mysql_error() |
返回上次调用的MySQL函数的错误消息。 |
mysql_escape_string() |
为了用在SQL语句中,对特殊字符进行转义处理。 |
mysql_fetch_field() |
返回下一个表字段的类型。 |
mysql_fetch_field_direct() |
给定字段编号,返回表字段的类型。 |
mysql_fetch_fields() |
返回所有字段结构的数组。 |
mysql_fetch_lengths() |
返回当前行中所有列的长度。 |
mysql_fetch_row() |
从结果集中获取下一行 |
mysql_field_seek() |
将列光标置于指定的列。 |
mysql_field_count() |
返回上次执行语句的结果列的数目。 |
mysql_field_tell() |
返回上次mysql_fetch_field()所使用字段光标的位置。 |
mysql_free_result() |
释放结果集使用的内存。 |
mysql_get_client_info() |
以字符串形式返回客户端版本信息。 |
mysql_get_client_version() |
以整数形式返回客户端版本信息。 |
mysql_get_host_info() |
返回描述连接的字符串。 |
mysql_get_server_version() |
以整数形式返回服务器的版本号。 |
mysql_get_proto_info() |
返回连接所使用的协议版本。 |
mysql_get_server_info() |
返回服务器的版本号。 |
mysql_info() |
返回关于最近所执行查询的信息。 |
mysql_init() |
获取或初始化MYSQL结构。 |
mysql_insert_id() |
返回上一个查询为AUTO_INCREMENT列生成的ID。 |
mysql_kill() |
杀死给定的线程。 |
mysql_library_end() |
最终确定MySQL C API库。 |
mysql_library_init() |
初始化MySQL C API库。 |
mysql_list_dbs() |
返回与简单正则表达式匹配的数据库名称。 |
mysql_list_fields() |
返回与简单正则表达式匹配的字段名称。 |
mysql_list_processes() |
返回当前服务器线程的列表。 |
mysql_list_tables() |
返回与简单正则表达式匹配的表名。 |
mysql_more_results() |
检查是否还存在其他结果。 |
mysql_next_result() |
在多语句执行过程中返回/初始化下一个结果。 |
mysql_num_fields() |
返回结果集中的列数。 |
mysql_num_rows() |
返回结果集中的行数。 |
mysql_options() |
为mysql_connect()设置连接选项。 |
mysql_ping() |
检查与服务器的连接是否工作,如有必要重新连接。 |
mysql_query() |
执行指定为“以Null终结的字符串”的SQL查询。 |
mysql_real_connect() |
连接到MySQL服务器。 |
mysql_real_escape_string() |
考虑到连接的当前字符集,为了在SQL语句中使用,对字符串中的特殊字符进行转义处理。 |
mysql_real_query() |
执行指定为计数字符串的SQL查询。 |
mysql_refresh() |
刷新或复位表和高速缓冲。 |
mysql_reload() |
通知服务器再次加载授权表。 |
mysql_rollback() |
回滚事务。 |
mysql_row_seek() |
使用从mysql_row_tell()返回的值,查找结果集中的行偏移。 |
mysql_row_tell() |
返回行光标位置。 |
mysql_select_db() |
选择数据库。 |
mysql_server_end() |
最终确定嵌入式服务器库。 |
mysql_server_init() |
初始化嵌入式服务器库。 |
mysql_set_server_option() |
为连接设置选项(如多语句)。 |
mysql_sqlstate() |
返回关于上一个错误的SQLSTATE错误代码。 |
mysql_shutdown() |
关闭数据库服务器。 |
mysql_stat() |
以字符串形式返回服务器状态。 |
mysql_store_result() |
检索完整的结果集至客户端。 |
mysql_thread_id() |
返回当前线程ID。 |
mysql_thread_safe() |
如果客户端已编译为线程安全的,返回1。 |
mysql_use_result() |
初始化逐行的结果集检索。 |
mysql_warning_count() |
返回上一个SQL语句的告警数。 |
做了下简单的封装
头文件
1 #ifndef __MYMYSQL_H__ 2 #define __MYMYSQL_H__ 3 #include <WinSock2.h> 4 #include <mysql.h> 5 #pragma comment(lib,"libmysql.lib") 6 #define SZCHARSIZE 100 7 typedef struct _tagMysqlInfo 8 { 9 char host[SZCHARSIZE]; //主机 10 char user[SZCHARSIZE]; //用户名 11 char passwd[SZCHARSIZE]; //密码 12 char db[SZCHARSIZE]; //数据库 13 UINT port; //端口号 14 char unix_socket[SZCHARSIZE]; //如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。 15 DWORD client_flag; // client_flag的值通常为0 16 }MYSQLINFO,*PMYSQLINFO; 17 class CMyMysql 18 { 19 public: 20 CMyMysql(void); 21 BOOL connect(const MYSQLINFO); //连接成功返回true 失败返回false 22 BOOL query(const char*); //查询mysql语句 23 my_ulonglong GetresultLine(); //获取查询到的行数 24 MYSQL* GetMysqlPtr(); //获取mysql指针 25 MYSQL_RES* GetMysqlresPtr(); //获取mysqlres指针 26 ~CMyMysql(void); 27 private: 28 MYSQL* m_mYsqlPtr; //mysql 指针 29 MYSQL_RES* m_mYsqlres; //mysql 结果集指针 30 }; 31 #endif //__MYMYSQL_H__
cpp文件
1 #include "MyMysql.h" 2 3 CMyMysql::CMyMysql(void) 4 :m_mYsqlPtr(NULL) 5 { 6 m_mYsqlPtr = mysql_init(NULL); 7 } 8 9 10 CMyMysql::~CMyMysql(void) 11 { 12 if (m_mYsqlPtr) 13 mysql_close(m_mYsqlPtr); 14 if (m_mYsqlres) 15 mysql_free_result(m_mYsqlres); 16 } 17 BOOL CMyMysql::connect(const MYSQLINFO mysqlInfo) 18 { 19 if(!mysql_real_connect(m_mYsqlPtr,mysqlInfo.host,mysqlInfo.user,mysqlInfo.passwd,mysqlInfo.db,mysqlInfo.port,mysqlInfo.unix_socket,mysqlInfo.client_flag)) 20 return FALSE; 21 else 22 return TRUE; 23 } 24 BOOL CMyMysql::query(const char* szSql) 25 { 26 if(!strlen(szSql))return FALSE; 27 if(mysql_query(m_mYsqlPtr,szSql)) 28 return FALSE; 29 else 30 return TRUE; 31 } 32 my_ulonglong CMyMysql::GetresultLine() 33 { 34 m_mYsqlres = mysql_store_result(m_mYsqlPtr); 35 if(!m_mYsqlres)return NULL; 36 return mysql_num_rows(m_mYsqlres); 37 } 38 MYSQL* CMyMysql::GetMysqlPtr() 39 { 40 return m_mYsqlPtr; 41 } 42 MYSQL_RES* CMyMysql::GetMysqlresPtr() 43 { 44 return m_mYsqlres; 45 }
简单的调用例子用的MFC
1 void CMysqlDemoDlg::OnBnClickedButton1() 2 { 3 CMyMysql * mYSQL = new CMyMysql(); 4 MYSQLINFO mysqlInfo; 5 ZeroMemory(&mysqlInfo,sizeof(MYSQLINFO)); 6 CopyMemory(mysqlInfo.host,"localhost",_tcslen("localhost")); 7 CopyMemory(mysqlInfo.user,"root",_tcslen("root")); 8 CopyMemory(mysqlInfo.passwd,"123456",_tcslen("123456")); 9 mysqlInfo.port =3306; 10 if (!mYSQL->connect(mysqlInfo)) 11 { 12 AfxMessageBox("连接数据库失败!\r\n"); 13 delete mYSQL; 14 return ; 15 } 16 if (mysql_set_character_set(mYSQL->GetMysqlPtr(),"gbk")) 17 { 18 AfxMessageBox("设置默认字符失败!\r\n"); 19 delete mYSQL; 20 21 } 22 if (mysql_select_db(mYSQL->GetMysqlPtr(),"ecshop")) 23 { 24 AfxMessageBox("选择数据库失败!\r\n"); 25 delete mYSQL; 26 } 27 if(!mYSQL->query("select * from ecs_admin_user;")) 28 { 29 AfxMessageBox("查询失败!\r\n"); 30 delete mYSQL; 31 } 32 my_ulonglong Line = mYSQL->GetresultLine(); 33 MYSQL_FIELD* fd = NULL; 34 CString str; 35 while (fd = mysql_fetch_field(mYSQL->GetMysqlresPtr())) 36 { 37 str+= fd->name; 38 str+="\r\n"; 39 } 40 SetDlgItemText(IDC_EDIT1,str); 41 MYSQL_ROW rows; 42 str = ""; 43 UINT listSize = mysql_num_fields(mYSQL->GetMysqlresPtr()); 44 while(rows = mysql_fetch_row(mYSQL->GetMysqlresPtr())) 45 { 46 for (UINT i = 0;i<listSize;i++) 47 { 48 str+= rows[i]; 49 } 50 str+="\r\n"; 51 } 52 SetDlgItemText(IDC_EDIT2,str); 53 delete mYSQL; 54 }