利用MySQL自带的C API函数实现数据库功能调用

合集下载

linux下使用libmysql++库操作mysql的C API

linux下使用libmysql++库操作mysql的C API

linux下使用libmysql++库操作mysql的C API系统环境Ubuntu 12.041、安装mysqlubuntu下安装mysql是比较简单的,直接通过apt-get安装1.sudo apt-get install mysql-server-5.52、登入mysql1.mysql [-h host_name][-u user_name][-p password]其中参数-h后面要给出连接的数据库的IP地址或者域名、参数-u后面要给出登录的用户名、参数-p表示登录的密码。

有时连接本机默认的Mysql数据库服务器,则可以直接在命令行中输入如下简写形式(root用户):1.mysql -u root -p之后,系统会提示你输入root用户的密码3、mysql的基本命令在mysql中,输入help或者?命令,即可用查看mysql支持的内部操作命令。

(1)显示数据库列表显示数据库列表命令比较简单,直接输入show databases;即可。

(2)选择一个数据库选择一个数据库比较简单,使用use dbname,其中dbname为要选择的数据库名字。

比如,这里我们选择test数据库:(3)查看一个数据库中的所有表通过show tables,可以查看一个数据库中所有的数据库表。

(4)退出简单的命令,quit;需要注意的是,每个命令后面需要加上分号“;”,因为分号表示一个事务的结束。

4、mysql数据库操作实例。

(1)创建班级数据库创建数据库的命令式create databases dbname,其中dbname为数据库名,例如当前要创建的数据库名为class,因此需要输入下面的命令:1. mysq->create database class;(2)创建学生信息表1. mysql>use class;2. mysql>create table student (nid INT UNIQUE,name VARCHAR(20),age int);(3)插入基本数据向已经创建好的数据表中插入3条基本记录,SQL语句如下:1. mysql->insert into student values(100,'Lee', 16);2. mysql->insert into student values(101,'Tom', 17);3. mysql->insert into student values(102,'Harry', 15);(4)查询全部数据利用select语句查询全部记录。

mysql数据库接口的vc实现与应用

mysql数据库接口的vc实现与应用

mysql数据库接口的vc实现与应用(一)摘要:mysql数据库作为一种网络数据库性能十分出色,但其在应用软件中使用较少。

本文将主要探讨mysql提供的两种数据库接口——(odbc api和c api)在vc中的应用,并且形成一个类用以封装c api数据库接口的功能。

关键词:mysql;数据库接口;odbc api;c api引言随着现代计算机软硬件及网络技术的发展,在网上查找资料已成为现在获取信息的最重要手段之一。

众所周知,所有的网上信息都是储存在网站数据库中的,这些信息的查询、更新等操作的功能则是由数据库服务器提供的,显然,数据库服务器的性能将直接关系到网站的生存。

网站搭建中用的最多的数据库服务器是oracle和mysql,前者功能强大,属于旗舰型数据库服务器,但前期投入太大;后者功能不断完善,简单易用而又不失性能,并且可以免费获得。

因此,许多中小型网站的数据库服务器选用mysql,而且,由于mysql性能出色,一些大型网站也选用了mysql。

由此可见,mysql数据库服务器在网站建设中的表现是十分出色的。

但是,正因为这样,几乎很少有人将mysql用于应用软件的开发中。

本文将详细介绍vc环境中mysql数据库服务器不同接口的应用,并最终将产生一个cdatabase类封装mysql数据库接口功能。

数据库接口实现与应用的计算机环境:硬件,c466、128m、15g;软件及操作系统,visual c++ 6.0、mysql 3.23.22-beta for win32、win98。

1 mysql数据库简介mysql是一个真正的多用户、多线程sql数据库服务器。

sql(结构化查询语言)是世界上最流行的和标准化的数据库语言,它使得存储、更新和存取信息更加容易。

mysql是一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和许多不同的客户程序以及库组成的。

mysql的主要目标是快速、健壮和易用。

用C调用mysql数据库的存储过程

用C调用mysql数据库的存储过程

用C调用mysql数据库的存储过程1 在mysql中的test数据库中建表:use test;create table tt(id int,name varchar(20));2 插入一些数据:insert into tt values (1,’wlw’),(2,’ssg’);select * from tt;+--------+----------+| id | name |+---------+----------+| 1 | wlw || 2 | ssg |+---------+---------+2 rows in set (0.00 sec)3 创建一个简单的存储过程:delimiter //create procedure insertValue()begininsert into tt values (3,’wjx’);end//delimiter ;4 在linux下创建insert.c文件#include <stdio.h>#include <string.h>#include <mysql/mysql.h>int main(){MYSQL mysql; // need a instance to initMYSQL_RES res;MYSQL_ROW row;char query[256];int t;// connect the databasemysql_init(&mysql);if(!mysql_real_connect(&mysql,"127.0.0.1","root","root","test",0,NULL,CLIENT_MULTI_STA TEMENTS)){printf( "Error connecting to database: %s\n",mysql_error(&mysql));}else {printf("Connected...\n");// get the result from the executing select querystrcpy(query,"call addValue()");t = mysql_real_query(&mysql,query,(unsigned int) strlen(query));if (t){printf("Error making query: %s\n",mysql_error(&mysql));}else {printf("[%s] made...\n", query);}mysql_close(&mysql);return 0;}}5 编译insert.c 文件:gcc -o insert insert.c -L/usr/ -L/usr/lib/mysql -lmysqlclient -lmysqlclient –lz6 执行生成文件insert./insert执行结果:[root@wlw c]# ./insertConnected...[call addValue()] made...7 查看数据库:mysql> select * from tt;+------+------+| id | name |+------+------+| 1 | wlw || 2 | ssg || 3 | wjx |+------+------+3 rows in set (0.00 sec)。

使用C语言调用mysql数据库编程实战以及技巧

使用C语言调用mysql数据库编程实战以及技巧

使⽤C语⾔调⽤mysql数据库编程实战以及技巧今天编写使⽤C语⾔调⽤mysql数据库编程实战以及技巧。

为其它IT同⾏作为參考,当然有错误能够留⾔,共同学习。

⼀、mysql数据库的C语⾔经常使⽤接⼝API1.⾸先当然是链接数据库mysql_real_connect,原型例如以下:MYSQL * STDCALL 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 long clientflag);第⼀个參数mysql是C语⾔api中⼀个很重要的变量。

⾥⾯内存很丰富。

有port,dbname,charset等连接基本參数。

它也包括了⼀个叫st_mysql_methods的结构体变量,该变量⾥⾯保存着许多函数指针。

这些函数指针将会在数据库连接成功以后的各种数据操作中被调⽤。

mysql_real_connect函数中各參数,基本都是顾名思意。

2.连接数据库成功之后就能够使⽤mysql_query运⾏sql语句。

原型例如以下:int STDCALL mysql_query(MYSQL *mysql, const char *q);第⼀个參数上⾯已经介绍过。

第⼆个參数为要运⾏的sql语句,主要就是运⾏SQL语句的增、删、改、查等功能。

这个函数整体就两步:(1)发送sql语句,事实上就⼀个socket发送sql 语句,加上mysql固定的协议头。

(2)然后就是接受结果,这⾥将会调⽤MYSQL变量中的st_mysql_methods中的read_query_result函数指针a 假设包括⼆进制数据的查询,要使⽤mysql_real_query.b 检查受查询影响的⾏数:my_ulonglong mysql_affected_rows(MYSQL *connection);my_ulonglong是⽆符号长整形,为%lu格式这个函数返回受之前运⾏update,insert或delete查询影响的⾏数。

(个人整理)Mysql C API

(个人整理)Mysql C API

25.2.1. C API数据类型∙MYSQL该结构代表1个数据库连接的句柄。

几乎所有的MySQL函数均使用它。

不应尝试拷贝MYSQL 结构。

不保证这类拷贝结果会有用。

∙MYSQL_RES该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE, EXPLAIN)。

在本节的剩余部分,将查询返回的信息称为“结果集”。

∙MYSQL_ROW这是1行数据的“类型安全”表示。

它目前是按照计数字节字符串的数组实施的。

(如果字段值可能包含二进制数据,不能将其当作由Null终结的字符串对待,这是因为这类值可能会包含Null字节)。

行是通过调用mysql_fetch_row()获得的。

∙MYSQL_FIELD该结构包含关于字段的信息,如字段名、类型和大小。

这里详细介绍了其成员。

通过重复调用mysql_fetch_field(),可为每个字段获得MYSQL_FIELD结构。

字段值不是该结构的组成部份,它们包含在MYSQL_ROW结构中。

∙MYSQL_FIELD_OFFSET这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。

偏移量是行内的字段编号,从0开始。

∙my_ulonglong用于行数以及mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()的类型。

该类型提供的范围为0~1.84e19。

在某些系统上,不能打印类型my_ulonglong的值。

要想打印这类值,请将其转换为无符号长整数类型并使用%lu打印格式,例如:printf ("Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));下面列出了MYSQL_FIELD结构包含的成员:· char * name字段名称,由Null终结的字符串。

如果用AS子句为该字段指定了别名,名称的值也是别名。

MySQL中文参考手册MySQL学习总结-MySQL-API函数描述

MySQL中文参考手册MySQL学习总结-MySQL-API函数描述

MySQL函数描述、学习总结(适用版本:MySQL 3.23.7alpla)1. MySQL API (2)1.1. MySQL C API (2)1.2. C API数据类型 (3)1.3. C API函数概述 (6)1.4. C API函数描述 (9)1.4.1. mysql_affected_rows() (10)1.4.2. mysql_close() (11)1.4.3. mysql_connect() (11)1.4.4. mysql_change_user() (12)1.4.5. mysql_create_db() (13)1.4.6. mysql_data_seek() (14)1.4.7. mysql_debug() (15)1.4.8. mysql_drop_db() (15)1.4.9. mysql_dump_debug_info() (16)1.4.10. mysql_eof() (17)1.4.11. mysql_errno() (18)1.4.12. mysql_error() (19)1.4.13. mysql_escape_string() (20)1.4.14. mysql_fetch_field() (21)1.4.15. mysql_fetch_fields() (22)1.4.16. mysql_fetch_field_direct() (23)1.4.17. mysql_fetch_lengths() (23)1.4.18. mysql_fetch_row() (24)1.4.19. mysql_field_count() (26)1.4.20. mysql_field_seek() (27)1.4.21. mysql_field_tell() (28)1.4.22. mysql_free_result() (28)1.4.23. mysql_get_client_info() (29)1.4.24. mysql_get_host_info() (29)1.4.25. mysql_get_proto_info() (30)1.4.26. mysql_get_server_info() (30)1.4.27. mysql_info() (30)1.4.28. mysql_init() (31)1.4.29. mysql_insert_id() (32)1.4.30. mysql_kill() (32)1.4.31. mysql_list_dbs() (33)1.4.32. mysql_list_fields() (34)1.4.33. mysql_list_processes() (35)1.4.34. mysql_list_tables() (35)1.4.35. mysql_num_fields() (36)1.4.36. mysql_num_rows() (38)1.4.37. mysql_options() (38)1.4.38. mysql_ping() (40)1.4.39. mysql_query() (41)1.4.40. mysql_real_connect() (41)1.4.41. mysql_real_query() (43)1.4.42. mysql_reload() (44)1.4.43. mysql_row_seek() (45)1.4.44. mysql_row_tell() (45)1.4.45. mysql_select_db() (46)1.4.46. mysql_shutdown() (47)1.4.47. mysql_stat() (47)1.4.48. mysql_store_result() (48)1.4.49. mysql_thread_id() (49)1.4.50. mysql_use_result() (50)1.4.51. 为什么在mysql_query()返回成功后,mysql_store_result()有时返回NULL? (51)1.4.52. 我能从查询中得到什么结果? (51)1.4.53. 我怎样能得到最后插入的行的唯一ID? (52)1.MySQL API1.1. MySQL C APIC API代码是随MySQL分发的,它被包含在mysqlclient库且允许C程序存取一个数据库。

在MySQL中使用用户自定义函数提升查询功能

在MySQL中使用用户自定义函数提升查询功能

在MySQL中使用用户自定义函数提升查询功能随着互联网和大数据时代的到来,数据处理和查询功能的需求日益增长。

在MySQL数据库中,用户自定义函数(User-Defined Functions,简称UDF)是一项非常重要的功能,可以提升数据库查询的性能和灵活性。

本文将从概述UDF的作用和原理开始,介绍如何在MySQL中使用用户自定义函数来提升查询功能。

一、概述UDF的作用和原理用户自定义函数是指用户根据自己的需求编写的特定功能的函数。

在MySQL 中,用户可以通过使用C/C++编写自己的函数,并将其编译为动态链接库(DLL)。

然后将这些DLL导入MySQL,就可以在SQL语句中调用这些用户自定义函数了。

UDF的作用非常广泛,可以用于各种复杂的数据处理和计算任务。

例如,可以使用UDF来进行字符串处理、数值计算、日期转换等。

通过使用UDF,用户可以自定义自己的函数,以满足特定的业务需求。

UDF的原理是通过将自定义的函数编译为动态链接库,然后将这些动态链接库加载到MySQL中,使得MySQL可以调用这些函数。

UDF的编写语言通常是C/C++,因为MySQL使用C/C++作为其底层的开发语言。

二、使用UDF提升查询功能的方法在MySQL中使用UDF提升查询功能有多种方法,下面将介绍其中的几种常见方法。

1. 自定义聚合函数聚合函数是用于对数据进行汇总计算的函数,如求和、平均值、最大值等。

MySQL内置了一些常见的聚合函数,但有时候这些内置函数不能满足我们的需求。

这时候,我们可以使用UDF来自定义聚合函数。

例如,我们需要计算某列数据的标准差,而MySQL并没有提供标准差的内置函数。

这时候,我们可以使用UDF来自定义一个标准差函数,以满足我们的需求。

2. 自定义排序规则在MySQL中,排序是非常频繁的操作。

虽然MySQL提供了一些内置的排序规则,但有时候这些内置规则并不能满足我们的需求。

这时候,我们可以使用UDF来自定义排序规则。

C++连接mysql数据库的两种方法小结

C++连接mysql数据库的两种方法小结

C++连接mysql数据库的两种⽅法⼩结现在正做⼀个接⼝,通过不同的连接字符串操作不同的数据库。

要⽤到mysql数据库,以前没⽤过这个数据库,⽤access和sql server⽐较多。

通过⽹上的⼀些资料和⾃⼰的摸索,⼤致清楚了C++连接mysql的⽅法。

可以通过2种⽅法实现。

第⼀种⽅法是利⽤ADO连接,第⼆种⽅法是利⽤mysql⾃⼰的api函数进⾏连接。

第⼀种⽅法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库。

暂时只连接了mysql,sqlserver,oracle,access。

对于access,因为它创建表的SQL 语句不太兼容标准SQL语句,需要做⼀些处理,这⾥暂时不说。

第⼆种⽅法只能针对于mysql数据库的连接,不过⽤这种⽅法不⽤安装MyODBC服务器程序。

不管⽤哪种⽅法,⾸先需要安装Mysql数据库,安装⽅法请看“mysql安装及⼀些注意点”。

最好安装⼀个Navicat for mysql,⽅便操作mysql数据库。

下⾯分别说下这两种⽅法:(⼀)通过ADO连接MySql数据库1、通过ADO连接MySql数据库,⾸先得安装MyODBC服务器程序。

MyODBC版本要和MySql的版本对应上,否则会连接不上数据库。

我⽤的版本分别是mysql-5.1.48-win32.msi和mysql-connector-odbc-5.1.5-win32.msi。

安装好后,点击开始菜单->设置->控制⾯板->管理⼯具->数据源(ODBC)->⽤户DSN->添加->选择MySQL ODBC 5.1 Driver。

如下图:然后双击MySQL ODBC 5.1 Driver进⾏配置。

配置好可以点Test进⾏下测试(如下图),如果能连上会弹出connection successful对话框。

上图中的Data Source Name:中的内容就是代码⾥DSN所对应的值。

C连接MYSQL数据库的3种方法及示例

C连接MYSQL数据库的3种方法及示例

C连接MYSQL数据库的3种方法及示例连接MYSQL数据库有多种方法,下面介绍其中三种常用的方法。

1.使用CAPI连接MYSQL数据库CAPI是官方提供的一套用于连接和操作MYSQL数据库的函数库。

使用该API,可以在C程序中直接连接MYSQL数据库,并执行各种SQL语句。

以下是一个连接MYSQL数据库的示例:```c#include <mysql.h>int maiMYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;conn = mysql_init(NULL);if (conn == NULL)fprintf(stderr, "mysql_init failed\n");return 1;}if (mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0) == NULL)fprintf(stderr, "mysql_real_connect failed: %s\n", mysql_error(conn));mysql_close(conn);return 1;}if (mysql_query(conn, "SELECT * FROM table"))fprintf(stderr, "mysql_query failed: %s\n",mysql_error(conn));mysql_close(conn);return 1;}res = mysql_use_result(conn);while ((row = mysql_fetch_row(res)) != NULL)printf("%s %s %s\n", row[0], row[1], row[2]);}mysql_free_result(res);mysql_close(conn);return 0;```上述代码首先初始化MYSQL对象,然后使用mysql_real_connect函数连接MYSQL数据库。

C语言操作MYSQL

C语言操作MYSQL

C语言操作MYSQLC语言是一种强大的编程语言,可以用于各种应用程序的开发。

在许多应用程序中,数据库是一个重要的组成部分。

MySQL是一个流行的开源数据库管理系统,提供了高性能、可靠性和可扩展性。

在C语言中,我们可以使用各种API来操作MySQL数据库。

在本文中,我们将讨论如何在C语言中使用MySQLAPI连接到数据库、执行SQL语句以及处理结果。

完成安装后,我们可以在C代码中包含"mysql.h"头文件,然后使用mysql_init(函数初始化一个MYSQL结构体。

```c#include <mysql.h>int mainMYSQL *conn;conn = mysql_init(NULL);//...return 0;```接下来,我们需要用mysql_real_connect(函数连接到数据库。

我们需要提供主机名、用户名、密码以及数据库名称。

成功连接后,函数将返回一个非空的MYSQL指针,代表与数据库的连接。

//...MYSQL *conn;conn = mysql_init(NULL);mysql_real_connect(conn, "localhost", "root", "password", "database", 0, NULL, 0);//...```有了连接,我们可以执行SQL语句来操作数据库。

使用mysql_query(函数可以执行任意的SQL语句,如SELECT、INSERT、UPDATE等。

```c//...mysql_query(conn, "SELECT * FROM table");//...```执行完查询后,我们需要获取并处理结果。

使用mysql_use_result(函数可以获取结果集,并使用mysql_fetch_row(函数来逐行提取结果。

mysqlcapi(总结)

mysqlcapi(总结)

mysqlcapi(总结)MySQL_C_API编程实践1MySQL C API helloWorld1.1有关mysqlclient库C APIs包含在mysqlclient库⽂件当中,与MySQL的源代码⼀块发⾏,⽤于连接到数据库和执⾏数据库查询1.2helloworld应⽤程序编写int main(){int ret = NULL;MYSQL mysql;MYSQL *connect;//MYSQL_RES *res;//MYSQL_ROW row;//char *query;//int t, r;/*if (mysql_library_init(0, NULL, NULL)) {fprintf(stderr, "could not initialize MySQL library\n");exit(1);}*/mysql_init(&mysql);/*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 long client_flag)*//*unsigned int mysql_errno(MYSQL *mysql);*/connect = mysql_real_connect(&mysql, "localhost", "root", "123456", "mydb2", 0, NULL, 0 );if (connect == NULL){ret = mysql_errno(connect);printf("func mysql_real_connect() err\n");return ret;}else{printf(" ok......\n");}printf("connect:%d &mysql:%d \n",connect, &mysql );mysql_close(connect);//mysql_library_end();}1.3helloworld应⽤程序调试MySQL开发环境熟悉q mysq的开发头⽂件⽬录为 /usr/include/mysql。

课题_mysql的c api 简单用法

课题_mysql的c api 简单用法

mysql的c api 简单用法首先第一步,当然是去mysql网站下载一下C API的库文件以及头文件了无非也是几个数据结构以及几个函数先看一下数据结构,如下MYSQL这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。

MYSQL_RES这个结构代表返回行的一个查询的(SELECT, SHOW, DESCRIBE, EXPLAIN)的结果。

从查询返回的信息在本章下文称为结果集合。

MYSQL_ROW这是一个行数据的类型安全(type-safe)的表示。

当前它实现为一个计数字节的字符串数组。

(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节) 行通过调用mysql_fetch_row()获得。

MYSQL_FIELD这个结构包含字段信息,例如字段名、类型和大小。

其成员在下面更详细地描述。

你可以通过重复调用mysql_fetch_field()对每一列获得MYSQL_FIELD 结构。

字段值不是这个结构的部分;他们被包含在一个MYSQL_ROW结构中。

然后介绍几个最常用的api函数然后最直观的看看代码吧。

// mysql_demo.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include <my_global.h>#include <mysql.h>#pragma comment(lib,"mysqlclient.lib")static char *opt_host_name = NULL; /**//*服务器主机名称默认为localhost*/static char *opt_user_name = "root"; /**//*数据库用户名默认为当前登录名*/static char *opt_password = NULL; /**//*密码默认为空*/static uint opt_port_num = 0; /**//*端口使用内建值*/static char *opt_socket_name = NULL; /**//*socket name (use build-in value)*/static char *opt_db_name = "luaRules"; /**//*数据库名称默认为空*/static uint opt_flags = 0; /**//*连接参数*/static MYSQL *conn; /**//*pointer to connection handler*/void print_error(MYSQL *conn, const char *title){fprintf(stderr,"%s:\nError %u (%s)\n",title,mysql_errno(conn),mysql_error(conn));}void process_result_set(MYSQL *conn,MYSQL_RES *res_set){MYSQL_ROW row;uint i;while ((row = mysql_fetch_row(res_set)) != NULL){for(i=0;i<mysql_num_fields(res_set);i++){if (i > 0)fputc('\t',stdout);printf("%s",row[i] != NULL ? row[i] : "NULL");}fputc('\n',stdout);}if(mysql_errno(conn) != 0)print_error(conn,"mysql_fetch_row() failed");elseprintf("%lu rows returned \n",(ulong)mysql_num_rows(res_set));}int _tmain(int argc, _TCHAR* argv[]){/**//*初始化数据库指针*/if( (conn = mysql_init(NULL))== NULL){fprintf(stderr,"mysql 初始化失败(可能是内存溢出)!\n");exit(1);}/**//*连接到数据库*/if(mysql_real_connect(conn,opt_host_name,opt_user_name,opt_password,opt_db_name,opt_port_num,opt_socket_name,opt_flags) == NULL){fprintf(stderr,"mysql_real_connect 失败:\nError %u (%s)\n",mysql_errno(conn),mysql_error(conn));mysql_close(conn);exit(1);}/**//*执行插入语句*/if(mysql_query(conn,"insert into t_services (ServiceID,ServiceName) values ('RULE_LINBC_001','demo1')")){ print_error(conn,"执行插入失败");}else{printf("插入成功,受影响行数:%lu\n",(ulong)mysql_affected_rows(conn));}/**//*查询*/if(mysql_query(conn,"select * from t_services")){print_error(conn,"mysql_query() error");}else{MYSQL_RES *res_set;res_set = mysql_store_result(conn); /**//*生成结果集*/if(res_set == NULL)print_error(conn,"mysql_store_result failed");else {process_result_set(conn,res_set);mysql_free_result(res_set);}}/**//*断开*/mysql_close(conn);getchar();return 0;}本文不是为了代替mysql的文档,只是一个小demo,详细的还是得看myql手册库的安装及头文件路径的设置就不废话了。

MYSQL_C_API 函数

MYSQL_C_API 函数
函数
描述
mysql_affected_rows()
返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。
mysql_autocommit()
切换 autocommit模式,ON/OFF
mysql_change_user()
更改打开连接上的用户和数据库。
mysql_charset_name()
mysql_data_seek()
在查询结果集中查找属性行编号。
mysql_debug()
用给定的字符串执行DBUG_PUSH。
mysql_drop_db()
撤销数据库。该函数已不再被重视,使用SQL语句DROP DATABASE取而代之。
mysql_dump_debug_info()
mysql_stat()
以字符串形式返回服务器状态。
mysql_store_result()
检索完整的结果集至客户端。
mysql_thread_id()
返回当前线程ID。
mysql_thread_safe()
如果客户端已编译为线程安全的,返回1。
mysql_use_result()
通知服务器再次加载授权表。
mysql_rollback()
回滚事务。
mysql_row_seek()
使用从mysql_row_tell()返回的值,查找结果集中的行偏移。
mysql_row_tell()
返回行光标位置。
mysql_select_db()
选择数据库。
mysql_server_end()
mysql_library_init()

mysql的c语言函数

mysql的c语言函数

mysql的c语言函数MySQL是一种流行的关系型数据库管理系统,可以使用C程序来访问并处理MySQL数据库。

在C程序中,可以使用一个称为mysqlclient的MySQL C函数库来实现与MySQL数据库的通信。

MySQL C函数库公开了一组C API,可用于执行各种MySQL数据库操作,例如连接与断开连接,执行SQL查询,事务处理,以及数据的插入、修改、删除等操作。

MySQL C函数库常见函数如下:1. 连接与断开连接函数mysql_init和mysql_real_connect函数可用于连接到MySQL数据库服务器并开始一个新的连接。

mysql_close 函数用于停止与服务器连接。

mysql_init函数在C程序中启动MySQL库,用于初始化指向MySQL的主句柄。

具有以下语法:MYSQL *mysql_init(MYSQL *mysql)mysql_real_connect函数由C程序使用,在应用程序和MySQL服务之间建立一个新连接。

具有以下语法: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 flags);其中,参数host 指定MySQL服务器的主机名或IP地址,user 和 passwd是访问MySQL服务器所使用的用户名和密码,这些参数都是必需的。

参数db是MySQL数据库的名称,port参数是MySQL服务协议使用的TCP端口号。

如果指定unix_socket参数,MySQL 驱动程序将连接到UNIX域套接字而不是TCP / IP套接字。

flags参数用于控制与服务器建立的连接选项。

2. 执行SQL查询函数mysql_query函数可用于执行SQL查询(例如SELECT语句),并将结果集返回给C程序。

mysql自定义函数中调用函数的方法

mysql自定义函数中调用函数的方法

mysql自定义函数中调用函数的方法在MySQL中,自定义函数是一种非常有用的特性,它允许用户创建自己的函数来满足特定的需求。

在自定义函数中,有时候我们需要调用其他函数来完成一些操作。

下面介绍一种在MySQL自定义函数中调用函数的方法。

在MySQL中,我们可以使用内置的函数或者其他自定义函数作为子函数来调用。

为了实现这一目的,我们可以按照如下步骤进行:1. 首先,在创建自定义函数之前,确保被调用的函数已经存在。

如果你想调用MySQL内置的函数,不需要额外的操作;如果你想调用其他自定义函数,需要先创建这些函数。

2. 在创建自定义函数时,可以使用CALL语句来调用其他函数。

CALL语句用于执行存储过程或函数,我们可以用它来调用其他函数。

例如,假设我们有一个名为`get_average()`的函数,它返回某个列的平均值,我们可以在另一个自定义函数中调用它:```sqlCREATE FUNCTION calculate_grade(grade INT) RETURNS VARCHAR(10)BEGINDECLARE avg_grade FLOAT;DECLARE result VARCHAR(10);-- 调用get_average()函数CALL get_average(grade, avg_grade);IF avg_grade >= 90 THENSET result = 'A';ELSEIF avg_grade >= 80 THENSET result = 'B';ELSEIF avg_grade >= 70 THENSET result = 'C';ELSEIF avg_grade >= 60 THENSET result = 'D';ELSESET result = 'F';END IF;RETURN result;END;```在上面的例子中,我们创建了一个名为`calculate_grade()`的自定义函数,它接受一个整数参数`grade`。

C++利用MySQLAPI连接和操作数据库实例详解

C++利用MySQLAPI连接和操作数据库实例详解

C++利⽤MySQLAPI连接和操作数据库实例详解1.C++连接和操作MySQL的⽅式系列⽂章:在Windows平台,我们可以使⽤ADO、ODBC或者MySQL API进⾏连接和操作。

ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的⼀个⽤于存取数据源的COM组件。

它提供了程序语⾔和统⼀数据访问⽅式OLE DB的⼀个中间层,也就是Microsoft提出的应⽤程序接⼝(API)⽤以实现访问关系或⾮关系数据库中的数据。

ODBC(Open DataBase Connection)开放式系统互连,是⼀种数据库访问协议,提供了访问数据库的API接⼝。

基于ODBC的应⽤程序,对数据库操作不依赖于具体的DBMS,不直接与DBMS打交道,所有数据库操作由对应DBMS的ODBC驱动程序完成,即:系统中不需要安装DBMS系统,如SQL SERVER 2005,但必须有SQL SERVER 2005的ODBC驱动程序,然后在ODBC管理器中注册数据源后,就可以在应⽤程序中通过ODBC API访问该数据库。

ODBC数据库访问技术只适⽤于windows系统,因为需要在ODBC驱动程序管理器中进⾏数据源注册,⽽只有windows才集成了ODBC驱动程序管理器(“控制⾯板/管理⼯具/数据源”)。

ADO具有跨系统平台特性,它直接对DBMS数据库进⾏操作,即系统中必须有DBMS,但不需要驱动程序,不需要注册数据源,所以具有很好的可移植性。

那么,在Linux平台如何连接和使⽤MSQL数据库呢?我们同样可以使⽤ADO、unixODBC或者MySQL API。

这⾥不再赘述前两者的⽤法,读者可⾃⾏研究实践,下⽂将详细讲解MySQL创建数据库和C++利⽤MSQL API连接和操作数据库。

2.MSQL数据库的设计和建⽴MySQL数据库管理系统(DBMS)中,包含的MySQL中定义数据字段的类型对你数据库的优化是⾮常重要的。

C语言调用mysql快速教程(精华篇)

C语言调用mysql快速教程(精华篇)

1,使用c语言操作mysql之前,先在mysql里头创建一个数据库,一个表,在表里头添加数据如下:创建数据库,库名为cusemysql:mysql>create database cusemysql;创建表,表名为:mysql>use cusemysql;mysql>create table children(childno int not null unique,fname varchar(20),age int);添加一点数据哦:mysql>insert into children values(5,"花儿",10);对拉,为了方便起见,把表的大致样子给大家看看childno fname age1 小星92 大量152 ,下面进行具体的操作插入:insert好的,我们现编辑一段c代码,取名为insert.c////////////////////////////////////* insert.c */#include <stdio.h>#include <stdlib.h>#include "/usr/local/mysql/include/mysql/mysql.h"/*注意哦,上面必须是mysql.h的绝对地址,一般在mysql下的include目录下,仔细看看你的在哪里?*/int main(int argc, char *argv[]){MYSQL my_connection;int res;mysql_init(&my_connection);/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/if (mysql_real_connect(&my_connection, "localhost", "root","","cusemysql",0,NULL,CLIENT_FOUND_ROWS)){printf("Connection successn");res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");if (!res){printf("Inserted %lu rowsn",(unsigned long)mysql_affected_rows(&my_connection)); /*里头的函数返回受表中影响的行数*/}else{//分别打印出错误代码及详细信息fprintf(stderr, "Inserterror %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));}mysql_close(&my_connection);}else{fprintf(stderr, "Connection failedn");if (mysql_errno(&my_connection)){fprintf(stderr, "Connectionerror %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));}}return EXIT_SUCCESS;}/////////////////////////////////////////////代码写完了,要编译哦#gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lzok,现在我们执行看看#./insertConnection SuccessInserted 1 rowsyear,果然可以,呵呵不信到mysql下看看表children中是否多了刚才插入的那一行数据注:也许你会问上面gcc的命令参数是什么意思阿,其实,我也不太清楚,呵呵大概是要把mysql下的某个特定库包含进来,可是我不知道具体是个什么库,所以用*.a全部包含进来拉其实只要包含mysqlclient.a就可以,你试试看更新:update我们只要把上面的代码中的res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");换成res = mysql_query(&my_connection, "update children set age=20 where childno<5 ");即可上面语句实现的功能是,把编号小于5的所有孩子的年龄全部改成20岁检索:select看代码之前,最好是先看蓝色字体的部分[介绍了代码中用到的一些函数的作用]///////////////////////////////////////////////////* select.c */#include <stdio.h>#include <stdlib.h>#include "/usr/local/mysql/include/mysql/mysql.h"int main(int argc, char *argv[]){MYSQL my_connection;MYSQL_RES *res_ptr;MYSQL_ROW sqlrow;int res;mysql_init(&my_connection);/*mysql_real_connect(&mysql,host,user,passwd,dbname,0,NULL,0) == NULL)*/if (mysql_real_connect(&my_connection, "localhost", "root", "","cusemysql",0,NULL,CLIENT_FOUND_ROWS)){printf("Connection successn");res = mysql_query(&my_connection, "select childno,fname,age from children where age<20");if (res){printf("SELECT error:%sn",mysql_error(&my_connection));}else{res_ptr=mysql_store_result(&my_connection);if(res_ptr){printf("Retrieved %lu Rowsn",(unsigned long)mysql_num_rows(res_ptr));while((sqlrow=mysql_fetch_row(res_ptr))){printf("Fetched data...n");}if (mysql_errno(&my_connection)){fprintf(stderr,"Retrive error:%sn",mysql_error(&my_connection));}}mysql_free_result(res_ptr);}mysql_close(&my_connection);}else{fprintf(stderr, "Connection failedn");if (mysql_errno(&my_connection)){fprintf(stderr, "Connection error %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));}}return EXIT_SUCCESS;}//////////////////////////////////////////////////面语句实现的功能是:检索出年龄小于20岁的小孩的信息,不过没有对信息进行任何处理哦下次我们对数据进行一定的处理这里介绍上面用到的几个函数:可以从SELECT语句(或其他返回数据的语句)中检索完所有数据,在单一调用中,使用mysql_store_result:MYSQL_RES *mysql_store_result(MYSQL *connection);必须在mysql_query检索数据后才能调用这个函数,以在结果集中存储该数据。

mysql的c语言函数

mysql的c语言函数

mysql的c语言函数
MySQL是一种流行的关系型数据库管理系统,它支持许多编程语言,包括C语言。

MySQL的C语言函数提供了访问和管理MySQL数据库的功能。

这些函数可以用于编写基于MySQL的C应用程序和工具,从而实现数据存储和检索。

MySQL的C语言函数可以分为以下几类:
1. 连接函数:提供MySQL服务器连接和断开连接的功能,包括mysql_init()、mysql_real_connect()和mysql_close()等函数。

2. 查询函数:提供执行SQL查询操作的功能,包括
mysql_query()、mysql_real_query()和mysql_store_result()等函数。

3. 结果集函数:提供处理查询结果集的功能,包括
mysql_fetch_row()、mysql_fetch_field()和mysql_num_rows()等
函数。

4. 错误处理函数:提供处理MySQL错误的功能,包括
mysql_errno()和mysql_error()等函数。

5. 事务处理函数:提供处理MySQL事务的功能,包括
mysql_autocommit()、mysql_commit()和mysql_rollback()等函数。

除了以上函数之外,MySQL的C语言 API 还提供了一些其他的
函数和数据类型,用于处理日期、时间、字符集等方面的数据。

总之,MySQL的C语言函数提供了一个稳定、高效和可靠的接口,使得开发者能够轻松地访问和管理MySQL数据库。

通过使用这些函数,
开发者可以编写出高性能的基于MySQL的C应用程序和工具,以满足不同的数据存储和检索需求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3 利用MySQL自带的C API函数实现数据库功能调用由于各个数据库之间的差异,它们所提供的数据库功能也就各有不同。

这样,通过ODBC API就不可能完全拥有所有的数据库功能,因而影响了程序对数据库的控制功能,也就不能充分发挥数据库的能力。

并且这种统一的接口还是以损失效能为前提的,这就使数据库操作时间延长。

所以,为了解决以上问题,MySQL 的制造商在提供ODBC驱动程序的基础上,还提供了各种编程环境下的API,其中包括 C API。

这些API函数很显然能尽可能地发挥数据库的能力,并减少数据库操作的延长时间,但却使程序的通用性受到严重影响。

MySQL提供了一套C API函数,它由一组函数以及一组用于函数的数据类型组成,这些函数与MySQL 服务器进行通信并访问数据库,可以直接操控数据库,因而显著地提高了操控效能。

C API数据类型包括:MYSQL(数据库连接句柄)、MYSQL_RES(查询返回结果集)、MYSQL_ROW(行集)、MYSQL_FIELD(字段信息)、MYSQL_FIELD_OFFSET(字段表的偏移量)、my_ulonglong(自定义的无符号整型数)等;C API提供的函数包括:mysql_close()、mysql_connect()、mysql_query()、mysql_store_result()、mysql_init()等,其中mysql_query()最为重要,能完成绝大部分的数据库操控。

下面将具体讨论数据库操作类CDatabase通过C API的实现以及在VC中的应用。

3.1 CDatabase类的实现CDatabase类封装了MySQL数据库的功能,因此不具备通用性,只能在对MySQL 的应用程序中使用。

下面将根据C++要求及规范给出CDatabase类的具体结构以及相关简要介绍:class CDatabase{public:BOOL UnLockTable(); //解锁BOOL LockTable(char* TableName,char* PRIORITY); //加锁int Reload(); //重新登陆,非零时返回错误信息char* GetState(); //服务器状态char* GetServerInfo(); //服务器信息int GetProtocolInfo(); //协议信息char* GetHostInfo(); //主机信息char * GetClientInfo(); //客户机信息char* GetFieldName(int FieldNum); //字段名BOOL IsEnd(); //是否最后int DropDB(char *db); //删除数据库,非零时返回错误信息void SeekData(int offset); //查找指定数据int CreateDB(char *db); //创建数据库,非零时返回错误信息void FreeRecord(); //释放结果集unsigned int GetFieldNum(); //得到字段数BOOL ConnectDB(Database_Param *p); //连接数据库MYSQL_ROW GetRecord(); //得到结果(一个记录)my_ulonglong GetRowNum(); //得到记录数BOOL SelectDB(Data_Param *para); //选择数据库BOOL UpdateRecord(Data_Param *para); //更新记录BOOL SelectRecord(Data_Param *para); //选择记录BOOL InsertRecord(Data_Param *para); //插入记录BOOL DelRecord(Data_Param *para); //删除记录BOOL SelectAll(Data_Param *para); //选择所有记录char * OutErrors(); //输出错误信息CDatabase(); //初始化数据库virtual ~CDatabase(); //关闭数据库连接private:MYSQL mysql; //数据库连接句柄MYSQL_RES *query; //结果集MYSQL_ROW row; //记录集MYSQL_FIELD *field; //字段信息(结构体)BOOL FindSave(char *str); //查找并保存结果集};通过CDatabase类中定义的这些功能函数,我们可以通过远程或本机完成对MySQL数据库的绝大部分操控,并且由于定义了解锁和加锁功能,使得应用程序能够多线程或多进程地访问数据库,大大提高了效能。

以上函数的具体功能都是通过调用C API函数实现的。

3.2 CDatabase类在VC中的应用第一步建立初始化MySQL对象,并且将其初始化。

即定义CDatabase类对象,这样程序就会自动调用构造函数CDatabase(),完成初始化。

构造函数实现如下:CDatabase::CDatabase (){mysql_init (&mysql);}完成初始化只需定义CDatabase类对象,即CDatabase base;第二步连接服务器,并连接需要的数据库。

即调用ConnectDB(Database_Param *p)函数,结构体Database_Param中存放数据库参数,包括主机名、用户名、密码、数据库名等。

该函数如返回TRUE表示连接成功,否则表示失败。

连接函数实现如下:BOOL CDatabase::ConnectDB(Database_Param *p){if(!mysql_real_connect(&mysql,p->host,p->user,p->password,p->db,p->po rt,p->unix_socket,p->client_flag)){OutErrors(); // 输出错误信息return false;}return true;}第三步对数据库进行加锁。

即调用LockTable(char* TableName,char* PRIORITY),对相应的表TableName完成相应属性PRIORITY的加锁,使程序兼容多线程功能。

加锁函数实现如下:BOOL CDatabase::LockTable(char* TableName,char* PRIORITY){char str[50];sprintf(str,"LOCK TABLES %s %s",TableName,PRIORITY);if(mysql_query(&mysql,str))return false;return true;}第四步完成数据库操作。

即根据需要调用UpdateRecord(Data_Param *para)、SelectRecord(Data_Param *para)、InsertRecord(Data_Param *para)、DelRecord(Data_Param *para)等操作。

其中的结构体Data_Param中存放数据库操作参数。

上述两个结构体的定义在global.h中。

InsertRecord函数实现如下,其它实现方法相似:BOOL CDatabase::InsertRecord(Data_Param *para){char str[80];sprintf(str,"insert into %svalues(%s)",para->tab_name,para->insert_val);if(mysql_query(&mysql,str))return false;return true;}第五步解锁数据库。

即调用UnLockTable(),完成对上述被加锁的表的解锁。

解锁函数实现如下:BOOL CDatabase::UnLockTable(){if(mysql_query(&mysql,"UNLOCK TABLES"))return false;return true;}第六步关闭数据库连接。

即调用析构函数~CDatabase(),关闭数据库,并自动释放初始化时定义的CDatabase类对象。

析构函数如下:CDatabase::~CDatabase(){if(query)mysql_free_result(query);mysql_close(&mysql);}注意:在编译程序时,必须加入MySQL的库文件libmySQL.lib。

4 MySQL性能测试4.1 ODBC API通过索引读取200万行:528秒插入35万行: 750秒4.2 C API通过索引读取200万行:412秒插入35万行:435秒4.3 其它数据库(以MS_SQL为例,WINNT环境)通过索引读取200万行:1634秒插入35万行:4012秒注:以上数据是多次测量的平均值,不可避免一定的误差,仅供参考。

5 结束语MySQL作为一个免费的SQL数据库,虽然功能不够十分强大,且灵活性较差,但是,已经能够满足一般应用软件的要求,而且MySQL 数据库的开发者也在力求使之更加完善。

并且,由MySQL性能测试可以看出,它对数据的处理速度明显快于其它数据库服务器。

因此,如果应用软件对数据库的性能要求较高,而同时对数据库操作的功能及灵活性的要求不是很高的话,并且前期投入资金较少时,MySQL数据库服务器不失为一个最佳的选择。

s。

相关文档
最新文档