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

合集下载

C#操作MySQL的类

C#操作MySQL的类

C#操作MySQL的类C#操作MySQL的类public class MySqlService{private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(MySqlService));//server=localhost;user id=root;password=root;persist security info=True;database=test//Data Source=127.0.0.1;port=3306;Initial Catalog=tsyw;user id=root;password=q2ii3sfc;Charset=gbkprivate string conn_str = "server=localhost;user id=root;password=q2ii3sfc;persist security info=True;database=win008"; public MySqlService(){}/// <summary>/// 构造函数/// </summary>/// <param name="conn_str"></param>public MySqlService(string conn_str){this.conn_str = conn_str;}/// <summary>/// 执⾏sql语句返回List-Hashtable数据集/// </summary>/// <param name="sql"></param>/// <returns></returns>public List<Hashtable> Select(string sql){List<Hashtable> lst = new List<Hashtable>();using (MySqlConnection connection = new MySqlConnection(this.conn_str)){try{connection.Open();MySqlCommand cmd = new MySqlCommand(sql, connection);MySqlDataReader mdr = cmd.ExecuteReader();int columnCount = mdr.FieldCount;string _key = string.Empty;while (mdr.Read()){Hashtable ht = new Hashtable();for(int i = 0; i < columnCount; i++){_key = mdr.GetName(i);ht[_key] = mdr[i];}lst.Add(ht);}mdr.Close();connection.Close();}catch (Exception ex){logger.Warn("执⾏操作语句异常, SQL:" + sql, ex);}}return lst;}/// <summary>////// </summary>/// <param name="sql"></param>/// <returns></returns>public System.Data.DataSet Query(string sql){return null;}/// <summary>/// 执⾏操作语句 delete/insert/update/// <para>返回影响⾏数</para>/// </summary>/// <param name="sql"></param>/// <returns></returns>public int Execute(string sql)int rest = 0;using (MySqlConnection connection = new MySqlConnection(this.conn_str)) {try{connection.Open();MySqlCommand cmd = new MySqlCommand(sql, connection);rest = cmd.ExecuteNonQuery();rest = (int)(stInsertedId>0?stInsertedId:rest);connection.Close();}catch (Exception ex){logger.Warn("执⾏操作语句异常, SQL:" + sql, ex);}}return rest;}public Hashtable FetchRow(string sql){Hashtable ht = new Hashtable();using (MySqlConnection connection = new MySqlConnection(this.conn_str)) {try{connection.Open();MySqlCommand cmd = new MySqlCommand(sql, connection);MySqlDataReader mdr = cmd.ExecuteReader();int columnCount = mdr.FieldCount;string _key = string.Empty;while (mdr.Read()){for (int i = 0; i < columnCount; i++){_key = mdr.GetName(i);ht[_key] = mdr[i];}break;}mdr.Close();connection.Close();}catch (Exception ex){logger.Warn("执⾏操作语句异常, SQL:" + sql, ex);}}return ht;}/// <summary>/// 获取语句第⼀⾏第⼀列数据/// </summary>/// <param name="sql"></param>/// <returns></returns>public T FetchFirst<T>(string sql) {T t;using (MySqlConnection connection = new MySqlConnection(this.conn_str)) {try{connection.Open();MySqlCommand cmd = new MySqlCommand(sql, connection);t = (T)cmd.ExecuteScalar();connection.Close();}catch (Exception ex){t = default(T);logger.Warn("执⾏操作语句异常, SQL:" + sql, ex);}}return t;}/// <summary>/// 检查链接是否OK/// </summary>/// <returns></returns>public bool Ping()bool rest = false;using (MySqlConnection connection = new MySqlConnection(this.conn_str)) {try{connection.Open();MySqlCommand cmd = new MySqlCommand("select 1", connection); cmd.ExecuteScalar();connection.Close();rest = true;}catch{rest = false;}}return rest;}}C#操作MySQL的类[C#cāozuò MySQL de lèi]C# operation MySQL class。

poco mysql用法

poco mysql用法

poco mysql用法Poco是一个开源的C++类库,能够以高效和简单的方式处理数据库操作,其中包括了对MySQL数据库的支持。

本文将一步步介绍Poco库的MySQL用法,包括连接数据库、执行SQL语句、获取查询结果等。

1. 安装Poco库首先,我们需要在项目中安装Poco库。

可以通过从Poco官方网站下载源代码并手动编译安装,或者使用包管理器(如CocoaPods、vcpkg等)进行安装。

2. 连接MySQL数据库在使用Poco库进行MySQL数据库操作之前,我们需要先建立数据库连接。

Poco 提供了Poco::Data::Session类来进行连接数据库的操作。

(1)创建一个Poco::Data::MySQL::Connector对象,该对象将用于连接到MySQL 数据库。

cppinclude <Poco/Data/MySQL/Connector.h>在代码的合适位置调用以下代码Poco::Data::MySQL::Connector::registerConnector();(2)创建一个Poco::Data::Session对象,该对象将用于执行SQL语句。

cppinclude <Poco/Data/Session.h>创建数据库连接Poco::Data::Session session("MySQL","host=xxx;port=xxx;user=xxx;password=xxx;db=xxx");其中,host为MySQL服务器的地址,port为服务器的端口号,user为连接数据库所使用的用户名,password为用户名对应的密码,db为要连接的数据库名称。

(3)判断数据库连接状态。

cppif (session.isConnected()) {数据库连接成功} else {数据库连接失败}3. 执行SQL语句连接数据库成功后,我们可以使用Poco库来执行各种SQL语句。

windows下c++连接mysql

windows下c++连接mysql

C++连接mysql 数据库环境:windows xp VC++6.0 mysql目的:实现建表,插入,检索,删表等常用功能。

VC6.0 的配置:菜单栏—》工具—》选项—》目录—》添加:C:\Program Files\MySQL\MySQL Server 6.0\includeC:\Program Files\MySQL\MySQL Server 6.0\lib\opt拷贝C:\Program Files\MySQL\MySQL Server 6.0\lib\opt下的libmysql.lib到C:\Program Files\Microsoft Visual Studio\VC98\Lib下写aa.cpp【注:一层层执行可以看到更好的效果】#include <winsock.h>#include <iostream>#include <string>#include <mysql.h>using namespace std;#pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "libmysql.lib")//单步执行,不想单步执行就注释掉#define STEPBYSTEPint main(){cout<<"****************************************"<<endl;#ifdef STEPBYSTEPsystem("pause");#endif//必备的一个数据结构MYSQL mydata;//初始化数据库if(0==mysql_library_init(0,NULL,NULL)){cout<<"mysql_library_init() succeed"<<endl;}else{cout<<"mysql_library_init() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//初始化数据结构if(NULL!=mysql_init(&mydata)){cout<<"mysql_init() succeed"<<endl;}else{cout<<"mysql_init() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//在连接数据库之前,设置额外的连接选项//可以设置的选项很多,这里设置字符集,否则无法处理中文if(0==mysql_options(&mydata,MYSQL_SET_CHARSET_NAME,"gbk")) {cout<<"mysql_options() succeed"<<endl;}else{cout<<"mysql_options() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//连接数据库if(NULL!=mysql_real_connect(&mydata,"localhost","root","test","test",3306,NULL ,0))//这里的地址,用户名,密码,端口可以根据自己本地的情况更改{cout<<"mysql_real_connect() succeed"<<endl;}else{cout<<"mysql_real_connect() failed"<<endl;return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//sql字符串string sqlstr;//创建一个表sqlstr ="CREATE TABLE IF NOT EXISTS user_info";sqlstr+="(";sqlstr+="user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";sqlstr+="user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";sqlstr+="user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The SummationOf Using Time'";sqlstr+=");";if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() create table succeed"<<endl;}else{cout<<"mysql_query() create table failed"<<endl;mysql_close(&mydata);return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//向表中插入数据sqlstr ="INSERT INTO user_info(user_name) VALUES('公司名称'),('一级部门'),('二级部门'),('开发小组'),('姓名');";if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() insert data succeed"<<endl;}else{cout<<"mysql_query() insert data failed"<<endl;mysql_close(&mydata);return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//显示刚才插入的数据sqlstr="SELECT user_id,user_name,user_second_sum FROM user_info"; MYSQL_RES *result=NULL;if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() select data succeed"<<endl;//一次性取得数据集result=mysql_store_result(&mydata);//取得并打印行数int rowcount=mysql_num_rows(result);cout<<"row count: "<<rowcount<<endl;//取得并打印各字段的名称unsigned int fieldcount=mysql_num_fields(result);MYSQL_FIELD *field=NULL;for(unsigned int i=0;i<fieldcount;i++){field=mysql_fetch_field_direct(result,i);cout<<field->name<<"\t\t";}cout<<endl;//打印各行MYSQL_ROW row=NULL;row=mysql_fetch_row(result);while(NULL!=row){for(int i=0; i<fieldcount;i++){cout<<row[i]<<"\t\t";}cout<<endl;row=mysql_fetch_row(result);}}else{cout<<"mysql_query() select data failed"<<endl; mysql_close(&mydata);return -1;}#ifdef STEPBYSTEPsystem("pause");#endif//删除刚才建的表sqlstr="DROP TABLE user_info";if(0==mysql_query(&mydata,sqlstr.c_str())){cout<<"mysql_query() drop table succeed"<<endl; }else{cout<<"mysql_query() drop table failed"<<endl; mysql_close(&mydata) ;return -1;}mysql_free_result(result);mysql_close(&mydata);mysql_server_end();system("pause");return 0;}vc++添加c++文件:添加后:运行:没有错误的话会在debug下生成可执行文件:运行aa.exe:查看数据库:没用C连接之前:C连接mysql修改后:DONE!!1。

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数据库。

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

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

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语言数据库操作

C语言数据库操作

C语言数据库操作C语言是一种通用的编程语言,也可以用于数据库操作。

在C语言中,我们可以使用一些库来连接和操作数据库,比如SQLite和MySQL。

本文将介绍如何在C语言中进行数据库操作,包括连接数据库、创建表、插入和查询数据等。

1.连接数据库:要在C语言中连接数据库,我们需要引入相应的库。

例如,使用SQLite库的代码如下:```c#include <stdio.h>#include <stdlib.h>#include <sqlite3.h>int maisqlite3 *db;int rc = sqlite3_open("test.db", &db);if (rc != SQLITE_OK)fprintf(stderr, "Cannot open database: %s\n",sqlite3_errmsg(db));return 1;} elsefprintf(stdout, "Database opened successfully\n");}sqlite3_close(db);return 0;```在上面的代码中,我们首先通过调用`sqlite3_open`函数打开一个名为`test.db`的数据库。

如果打开成功,函数将返回`SQLITE_OK`。

否则,我们可以通过`sqlite3_errmsg`函数获取错误信息。

2.创建表:在连接数据库后,我们可以在其中创建表。

下面的代码演示了如何在SQLite数据库中创建表:```c#include <stdio.h>#include <stdlib.h>#include <sqlite3.h>int maisqlite3 *db;char *sql;char *errmsg = 0;int rc = sqlite3_open("test.db", &db);if (rc != SQLITE_OK)fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));return 1;} elsefprintf(stdout, "Database opened successfully\n");}sql = "CREATE TABLE COMPANY(""IDINTPRIMARYKEYNOTNULL,""NAMETEXTNOTNULL,""AGEINTNOTNULL,""ADDRESSCHAR(50),""SALARYREAL);";rc = sqlite3_exec(db, sql, 0, 0, &errmsg);if (rc != SQLITE_OK)fprintf(stderr, "SQL error: %s\n", errmsg);sqlite3_free(errmsg);} elsefprintf(stdout, "Table created successfully\n");}sqlite3_close(db);return 0;```在上面的代码中,我们使用`sql`字符串来定义一个创建表的SQL语句。

C语言数据库编程与SQL语句

C语言数据库编程与SQL语句

C语言数据库编程与SQL语句C语言作为一种通用的编程语言,除了能够用于开发各种类型的应用程序,还可以与数据库进行交互,实现数据的存储和检索。

在C语言中,我们可以使用SQL(Structured Query Language)语句来操作数据库,包括创建表格、插入数据、查询数据等操作。

一、数据库概述数据库是用来存储和管理数据的系统,它可以提供高效的数据访问与管理能力。

在C语言中,我们可以使用第三方的数据库管理系统(DBMS)如MySQL、SQLite等来操纵数据库,通过C语言与数据库进行交互。

二、数据库连接首先,我们需要在C语言中建立与数据库的连接。

通过调用DBMS 提供的API函数,我们可以建立连接、断开连接,并通过连接对象进行后续的操作。

连接数据库是使用SQL语句进行交互的前提,它允许我们在C程序中执行SQL语句,并获取执行结果。

三、创建数据库表格在C语言中,我们可以通过使用SQL语句来创建数据库表格。

SQL语句包括创建表格的名称、字段及其类型、约束等信息。

通过创建表格,我们可以定义数据在数据库中的结构,以及数据之间的关系,为后续的数据操作提供基础。

四、插入数据插入数据是向数据库中添加新的记录。

在C语言中,我们可以使用SQL语句的INSERT INTO语句将数据插入到指定的表格中。

插入的数据可以是变量、常量或者用户输入的数据。

通过插入数据,我们可以将C程序中的数据永久性地存储到数据库中,以供后续的查询和分析使用。

五、查询数据查询数据是从数据库中检索指定条件的记录。

在C语言中,我们可以使用SQL语句的SELECT语句从数据库中获取数据。

我们可以根据特定的条件来过滤结果,如WHERE子句用于指定查询条件,ORDER BY子句用于排序结果等。

通过查询数据,我们可以获取符合条件的数据并在C程序中进行进一步操作和分析。

六、更新数据更新数据是对数据库中已有记录进行修改。

在C语言中,我们可以使用SQL语句的UPDATE语句来更新数据。

VS2019快速实现C#连接MySQL数据库并实现基本操作代码

VS2019快速实现C#连接MySQL数据库并实现基本操作代码

VS2019快速实现C#连接MySQL数据库并实现基本操作代码⼀、⼯具:Visual Studio 2019MySQL 数据库⼆、添加动态链接:Visual Studio 中选择项⽬-> 管理NuGet程序包(N) -> 然后在浏览⾥⾯搜索MySql.Data并进⾏安装。

注意:因为 .Net 框架和 MySQL 版本问题安装时可能要选⽤不同的版本三、测试连接:创建⼀个类来放数据库的连接和各种操作,我这⾥创建的是 Dao.cs加⼊需要的头⽂件using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using MySql.Data.MySqlClient; // 这个是必须的连接数据库,并返回⼀个 MySqlConnection 对象;并实现基本操作;namespace BookMS{class Dao{MySqlConnection conn;// String sql = $"SELECT * FROM t_admin WHERE id = '{textBox1.Text}' and pwd = '{textBox2.Text}'";public MySqlConnection getConn(){string connstr = "server=127.0.0.1;port=3306;user=root;password=****;database=bookdb;Charset=utf8;";// 其中server是数据库所在⽹络的IP地址,127.0.0.1代表本地,port是数据库设置的端⼝号,user⽤户名,password密码,database是要连接的数据库名,Charset=utf8主要是处理中⽂编码问题conn = new MySqlConnection(connstr);conn.Open(); // 打开数据库return conn; // 返回数据库对象}public MySqlCommand command(string sql){MySqlCommand cmd = new MySqlCommand(sql, getConn());return cmd;}public int Execute(string sql) // 更新操作{return command(sql).ExecuteNonQuery();}public MySqlDataReader read(string sql) // 读取操作{return command(sql).ExecuteReader();}public void DaoClose() // 关闭数据库连接{conn.Close();}}}查询操作MySqlConnection conn = getConn(); //连接数据库conn.Open(); //打开数据库连接string sql = "select * from user'" ;MySqlCommand cmd = new MySqlCommand(sql, conn);MySqlDataReader mdr = cmd.ExecuteReader();if (mdr.Read()) {string str = mdr["authority"].ToString();//接收⼀个返回值//对查询到数据进⾏相应的操作}conn.Close();增删改操作类似,只是 sql 语句不相同,这⾥以插⼊操作为例MySqlConnection conn = getConn(); //连接数据库conn.Open(); //打开数据库连接string sql = "insert into user values('123','123')";MySqlCommand cmd = new MySqlCommand(sql, conn);cmd.ExecuteNonQuery();conn.Close();说明:在进⾏对数据库具体操作时建议在Dao类中直接写不同的函数来实现,在Form代码处创建Dao对象来引⽤对应的⽅法,这样可以使代码更加简洁,同时也⽅便维护。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
即可 上面语句实现的功能是,把编号小于 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;
} }
return EXIT_SUCCESS; } ///////////////////////////////////////////// 代码写完了,要编译哦 #gcc -o insert insert.c -L /usr/local/mysql/lib/mysql/*.a -lz ok,现在我们执行看看 #./insert Connection Success Inserted 1 rows
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)) {
一旦检索了数据,则可以使用 mysql_fetch_row 来检索它,并且使用 mysql_data_seek、mysql_row_seek、mysql_row_tell 操作结果集。在开 始检索数据阶段之前,让我们先讨论一下这些函数。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
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)); }
使用等价的 PostgreSQL 时,应该知道返回 NULL 意味着已经发生了错误, 并且这与未检索到数据的情况不同。即使,返回值不是 NULL,也不意味 着当前有数据要处理。
如果未返回 NULL,则可以调用 mysql_num_rows 并且检索实际返回的行 数,它当然可能是 0。
my_ulonglong mysql_num_rows(MYSQL_RES *result);
year,果然可以,呵呵 不信到 mysql 下看看表 children 中是否多了刚才插入的那一行数据
注:也许你会问上面 gcc 的命令参数是什么意思阿,其实,我也不太清楚,呵呵 大概是要把 mysql 下的某个特定库包含进来,可是我不知道具体是个什么库,所以用*.a 全 部包含进来拉 其实只要包含 mysqlclient.a 就可以,你试试看
} else { //分别打印出错误代码及详细信息
fprintf(stderr, "Insert error %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));
} mysql_close(&my_connection); }
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); 对拉,为了方便起见,把表的大致样子给大家看看
printf("Connection successn"); res = mysql_query(&my_connection, "insert into children values(10,'Ann',5)");4;Inserted %lu rowsn",(unsigned long)mysql_affected_rows(&my_connection)); /*里头的函数返回受表中影响的行数*/
这个函数采用从存储结果中获取的结果结构,并且从中检索单一行,在行 结构中返回分配给您的数据。当没有更多数据或者发生错误时,返回 NULL。稍后,我们将回来处理这一行中的数据。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);
这个函数允许您进入结果集,设置将由下一个获取操作返回的行。offset 是行号,它必须在从 0 到结果集中的行数减 1 的范围内。传递 0 将导致在 下一次调用 mysql_fetch_row 时返回第一行。
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); }
完成结果集时, 必须总是调用这个函数,以允许 MySQL 库整理分配给它 的对象。
else {
fprintf(stderr, "Connection failedn");
if (mysql_errno(&my_connection)) {
fprintf(stderr, "Connection error %d: %sn",mysql_errno(&my_connection),mysql_error(&my_connection));
MYSQL_ROW_OFFEST mysql_row_tell(MYSQL_RES *result);
这个函数返回一个偏移值,它表示结果集中的当前位置。它不是行号,不
能将它用于 mysql_data_seek。但是,可将它用于:
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset);
它移动结果集中的当前位置,并返回以前的位置。
有时,这一对函数对于在结果集中的已知点之间跳转很有用。请注意,不 要将 row tell 和 row seek 使用的偏移值与 data_seek 使用的行号混淆。这 些是不可交换的,结果将是您所希望看到的。
void mysql_free_result(MYSQL_RES *result);
这里介绍上面用到的几个函数:
可以从 SELECT 语句(或其他返回数据的语句)中检索完所有数据,在单 一调用中,使用 mysql_store_result:
MYSQL_RES *mysql_store_result(MYSQL *connection);
必须在 mysql_query 检索数据后才能调用这个函数,以在结果集中存储该 数据。这个函数从服务器中检索所有数据并立即将它存储在客户机中。它 返回一个指向以前我们从未遇到过的结构(结果集结构)的指针。如果语 句失败,则返回 NULL。
错误,因为对于程序所有数据都是本地的。还可以立即发现返回的行数, 它可以使编码更简便。如前所述,它将所有结果立即地发送回客户机。对 于大结果集,它可 能耗费大量的服务器、网络和客户机资源。由于这些原因,使用更大的数 据集时,最好仅检索需要的数据。不久,我们将讨论如何使用 mysql_use_result 函数来完成该操作。
它从 mysql_store_result 取得返回的结果结构,并且在该结果集中返回行 数,行数可能为 0。如果 mysql_store_result 成功,则 mysql_num_rows 也总是成功的。
这 种 mysql_store_result 和 mysql_num_rows 的组合是检索数据的一种简便 并且直接的方法。一旦 mysql_store_result 成功返回,则所有查询数据都已经存储在客户机上并 且我们知道可以从结果结构中检索它,而不用担心会发生数据库或网络
相关文档
最新文档