c语言连接数据库
C语言连接数据库的代码

附一源码CWinApp theApp;using namespace std;CHmbAdoDBRs RfRst;CString sSql;CString seq, body, eng, tm, tl, icol, ecol, alc, bhmcdate;int i;BOOL DbOpen();BOOL CkseqtmpSelect();BOOL CkseqtmpUpdate();int PrintStatus();int SockInit();CHmbAdoDB Sqldb;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){int cnt = 0;int nRetCode = 0;int page = 1;int prt_ret;CString strDate, strTime;// initialize MFC and print and error on failureif (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {// TODO: change error code to suit your needscerr << _T("Fatal Error: MFC initialization failed") << endl;nRetCode = 1;}//DataBase Open...if(DbOpen()) cout << "DataBase Open Open Ok" << endl;else {cout << "DataBase Open Error\n" << endl;return -1;}while( 1 ) {ret = SockInit(); //建立socket连接if ( ret < 0 ) Sleep(3000);else break;}while( 1 ) {if ( CkseqtmpSelect() == FALSE ) { // CKSEQTMP FLAG03='0' SELECTSleep(3000);continue;}while( 1 ) { // PRINTER STATUS Checkprt_ret = PrintStatus();if ( prt_ret == 1 ) {closesocket(sid);WSACleanup();while( 1 ) {ret = SockInit();if ( ret < 0 ) Sleep(3000);else break;}break;}else {printf("Printer Status Check !!!\n");Sleep(3000);}}printf("%s-%s-%s-%s-%s-%s-%s-%s-%s\n", seq, body, eng, tm, tl, icol, ecol, alc, bhmcdate); memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, "%c%c1", ESC, W);ret = send( sid, sbuf, strlen(sbuf), 0 );if ( cnt == 0 || atoi(seq) < 2 ) {if ( atoi(seq) < 2 ) {cnt = 0;page = 1;memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, "%c%c%c", FF, CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );}memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, " [ BUMPER ASS'Y WORK ORDER ]%c%c%c%c%c%c", CR, LF, CR, LF, CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );strDate.Format("%s-%s-%s", bhmcdate.Left(4), bhmcdate.Mid(4,2), bhmcdate.Mid(6,2) );memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, " PAGE : %3d DA TE : %s%c%c", page, strDate, CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );memset(sbuf, 0x00, sizeof(sbuf));//123456789/123456789/123456789/123456789/123456789/1234567890123456789012345678901 234567890sprintf(sbuf,"========================================================%c%c", CR, LF); ret = send( sid, sbuf, strlen(sbuf), 0 );memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, " SEQ BODY NO BUMP ECOL T/L ENG BHMCTIME%c%c%c%c", CR, LF, CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf,"========================================================%c%c", CR, LF); ret = send( sid, sbuf, strlen(sbuf), 0 );}strTime.Format("%s:%s", bhmcdate.Mid(8,2), bhmcdate.Mid(10,2) );memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, " %-4.4s %-10.10s %-4.4s %-3.3s %-4.4s %-4.4s %-5.5s%c%c%c%c",seq, body, alc, ecol, tl, eng, strTime, CR, LF, CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );memset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, "--------------------------------------------------------%c%c", CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );prt_ret = PrintStatus();if ( prt_ret == 1 ) {for ( i=0; i<3; i++ ) {// CKSEQTMP FLAG03 UPDA TEif ( CkseqtmpUpdate() == TRUE ) break;else Sleep(1000);}cnt = cnt + 1;if ( cnt > 7) { // 8 LINE PRINTmemset(sbuf, 0x00, sizeof(sbuf));sprintf(sbuf, "%c%c%c", FF, CR, LF);ret = send( sid, sbuf, strlen(sbuf), 0 );page = page + 1;cnt = 0;}}else {printf("Printer Status Check !!!\n");}Sleep(3000);}closesocket(sid);WSACleanup();Sqldb.Close();return nRetCode;}//////////////////////////////////////////////////////////////////////// DB OPENBOOL DbOpen(){if(Sqldb.Open("DSN=bjmodule;UID=sa;PWD=bjmodule")) { Sqldb.m_bOpen = TRUE;return TRUE;}else {return FALSE;}}/////////////////////////////////////////////////////////////////////////////// CKSEQTMP FLAG03='0' SELECT为什么数据库的sql server中有存储过程?它用来干什么的?大型数据库都有存储过程呀.存储过程就是一组批处理命令集.执行批处理呀.好处就是执行效率高呀,而且容易更改呀,不需要改变外部程序1.你知道dos下面的批处理么?功能差不多。
C语言连接Mysql

C语言连接Mysql数据库:一,开发平台:Mysql5.0.18 Microsoft Visual C++ 6.0二,安装Mysql注意:若已安装了mysql5.0,先看看mysql安装路径下有没有include和lib目录,若没有则需重新安装mysql。
若已安装了mysql,且mysql安装路径下没有include 和lib目录。
则需先卸载mysql。
先把mysql的服务停止,然后再卸载。
在安装时一定要选择Complete安装。
因为在C连接Mysql时,需用到mysql安装路径下的include和lib目录。
若是安装时选择custom或typical可能导致没有include和lib目录。
下面介绍安装mysql5.0的安装步骤,请按照下图一步一步完成mysql的安装。
至此,mysql 安装完成。
勾选“Configure the MySQL Server now ”项进入mysq 相关配置点击“Execute ”至此点击“Finish”完成mysql安装,接下来可以安装oa.exe文件了。
更多事项请参考mysql官方手册说明。
注:如果计算机系统以前曾安装过mysql版本数据库,可能会出现下面类似错误此时并不要紧,mysql安装是正常的。
此时只需要点击“Retry”按键即可。
三,利用VC++创建一个C程序:①单击“文件”——单击“新建”,会弹出一个窗口(如图1),--选win32 console application --填写工程名并选择放置工程的位置-------确定------在弹出的窗口中选“一个空工程”(an empty project)-----确定。
图1②选中已建立的工程,然后选择“文件”选项卡-- 新建,再选中“C++Sourse File”(如图2)图2。
③在如图2的对话框中,在“文件名”栏目中输入文件名*.c(如以1.c为例,注:此时一定要带上.c,否则扩展名就变成了.cpp)。
C语言中的数据库操作技术

C语言中的数据库操作技术在使用C语言进行数据库操作时,通常会涉及到一些重要的技术和知识点。
本文将针对这些技术和知识进行详细介绍,帮助读者了解如何在C语言中有效地进行数据库操作。
1. 数据库连接在C语言中进行数据库操作的第一步是建立数据库连接。
通常需要引入相应的数据库连接库,比如MySQL提供了MySQL C API库,可以用来连接MySQL数据库。
在连接数据库之前,需要先创建数据库连接对象,并设置连接参数,比如数据库名、用户名、密码等。
然后使用连接对象来连接数据库,如果连接成功则可以进行后续的数据库操作。
2. 数据库查询一般数据库操作包括插入、更新、删除和查询数据等操作,其中查询数据是最常见的操作之一。
在C语言中进行数据库查询操作时,可以使用SQL语句来执行查询操作。
通常通过执行SELECT语句来查询数据库中的数据,并将查询结果返回给C程序进行处理。
在执行查询之后,可以通过获取查询结果集的方式来读取查询结果数据。
3. 数据库增删改除了查询操作,数据库操作还包括插入、更新和删除数据等操作。
在C语言中进行这些操作时,通常需要使用INSERT、UPDATE和DELETE语句来执行相应的操作。
通过执行这些SQL语句,可以向数据库中插入新数据、更新已有数据或删除数据。
当执行这些操作时,需要注意事务处理的问题,确保数据操作的完整性和一致性。
4. 预处理语句为了提高数据库操作的效率和安全性,可以使用预处理语句来执行SQL语句。
预处理语句可以将SQL语句编译为一个准备好的查询,然后多次执行这个预处理查询来减少编译开销。
在C语言中,可以使用数据库连接库中提供的API函数来创建和执行预处理语句,以提高数据库操作的性能。
5. 数据库事务数据库操作中的事务处理是非常重要的一环,可以确保数据操作的原子性和一致性。
在C语言中进行数据库事务处理时,可以使用数据库连接库提供的事务处理函数来开始、提交或回滚事务。
通过事务处理,可以将多个数据操作步骤放在一个事务中执行,确保数据操作的完整性,当任何一个操作出错时可以回滚整个操作。
c语言数据库连接

1."+="后面的"@"符号是防止将后面字符串中的"\"解析为转义字符. 2.如果要连接的数据库文件和当前文件在同一个目录下,还可以使用如下的方法连接: strConnection+="Data Source="; strConnection+=MapPath("Northwind.mdb"); 这样就可以省得你写一大堆东西了! 3.要注意连接字符串中的参数之间要用分号来分隔. "OleDbConnection objC OleDbConnection(strConnection);"这一句是利用定义好的连接字符串来建立了一 个链接对象,以后对数据库的操作我们都要和这个对象打交道. "objConnection.Open();"这用来打开连接.至此,与Access数据库的连接完成. -------------------------------------------------------------------------------2.C#连接SQL Server 程序代码: -------------------------------------------------------------------------------using System.Data; using System.Data.SqlClient; ... string strC; strConnection+="initial catalog=Northwind;Server=YourSQLServer;"; strConnection+="Connect Timeout=30"; SqlConnection objC SqlConnection(strConnection); ... objConnection.Open(); objConnection.Close(); ... --------------------------------------------------------------------------------
C语言连接mysql数据库

C语⾔连接mysql数据库操作系统:win7/64编译软件:VS2010数据库:5.7.11从C语⾔连接mysql数据库包含两个步骤:1 初始化连接句柄结构2 实际创建连接测试代码1:#include "stdafx.h"#include <WinSock2.h> /*socket通信,系统头⽂件*/#include <windows.h>#include <stdio.h>#include "mysql.h"#pragma comment(lib, "libmysql.lib")int main(){MYSQL *conn;char *server = "localhost";char *user = "root";char *password = "root";//“******”为你设置的密码char *database = "hyx";conn = mysql_init(NULL);if(!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))printf("连接失败:%s", mysql_error(conn));elseprintf("连接成功!");getchar();return0;}测试结果1:遇到的问题:error LNK2019: ⽆法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引⽤error LNK2019: ⽆法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引⽤error LNK2019: ⽆法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引⽤error LNK2019: ⽆法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引⽤解决⽅法:原因如下,我使⽤的系统是win7x64,MySQL 64位的lib也是64位的接⼝。
centos7 c语言开发 数据库连接 项目实例 -回复

centos7 c语言开发数据库连接项目实例-回复CentOS 7 是一种基于Linux 内核的操作系统,它广泛应用于服务器和嵌入式设备。
作为一种开源的操作系统,它具有稳定、安全且高性能的特点。
C语言是一种通用的编程语言,具有广泛的应用领域。
在本文中,我们将重点关注在CentOS 7 上使用C语言进行数据库连接和开发的项目实例。
我们将采用MySQL数据库作为示例数据库。
1. 安装和配置MySQL数据库首先,我们需要安装和配置MySQL数据库。
可以使用CentOS 7 的包管理器yum进行安装。
打开终端并输入以下命令:sudo yum install mysql-server安装完成后,我们需要启动MySQL服务,并设置MySQL服务在系统启动时自动启动。
可以使用以下命令执行这些操作:sudo systemctl start mysqlsudo systemctl enable mysql接下来,我们可以使用以下命令来设置MySQL的root密码和进行一些其他的安全设置:sudo mysql_secure_installation按照提示操作完成安全设置后,我们就可以开始使用MySQL数据库了。
2. 创建一个测试数据库和表在开始使用数据库进行开发前,我们需要创建一个用于测试的数据库和表。
打开终端并输入以下命令:mysql -u root -p然后,输入我们之前设置的root密码登陆MySQL。
接着输入以下命令创建一个名为"testdb"的数据库:CREATE DATABASE testdb;然后,我们可以使用以下命令切换到"testdb"数据库并创建一个名为"testtable"的表:USE testdb;CREATE TABLE testtable (id INT, name VARCHAR(20));现在,我们已经准备好在C语言代码中使用这个数据库和表进行开发了。
C连接MYSQL数据库的种方法及示例

C连接M Y S Q L数据库的种方法及示例IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】连接MYSQL数据库的方法及示例方法一:1、用MySQLDriverCS连接MySQL数据库先下载和安装MySQLDriverCS,地址:在安装文件夹下面找到,然后将添加引用到项目中注:我下载的是版本是 MySQLDriverCS-n-EasyQueryTools-4.0.1using System;using ;using ;using ;using ;using ;using MySQLDriverCS;namespace mysql{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){MySQLConnection conn = null;conn = new MySQLConnection(new MySQLConnectionString("localhost", "inv", "root", "831025").AsString);();MySQLCommand commn = new MySQLCommand("set names gb2312", conn); ();string sql = "select * from exchange ";MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);DataSet ds = new DataSet();(ds, "table1");();}}}2、通过ODBC访问mysql数据库:1. 安装Microsoft :我安装的是2. 安装MDAC 或者更高版本:我安装的是简体中文版3. 安装MySQL的ODBC驱动程序:我安装的是4. 管理工具 -> 数据源ODBC –>配置DSN…using System;using ;using ;using ; ;}finally{();}oString();tmp2 = reader[1].ToString();tmp3 = reader[2].ToString();}*/4.0.1sString);();MySQLCommand commn = new MySQLCommand("set names gb2312", conn); ();string sql = "select * from exchange ";MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);DataSet ds = new DataSet();(ds, "table1");();}}}2、通过ODBC访问mysql数据库:1. 安装Microsoft :我安装的是2. 安装MDAC 或者更高版本:我安装的是简体中文版3. 安装MySQL的ODBC驱动程序:我安装的是4. 管理工具 -> 数据源ODBC –>配置DSN…using System;using ;using ;using ; ;}finally{();}oString();tmp2 = reader[1].ToString(); tmp3 = reader[2].ToString(); }*/onnectionString;MySqlConnection mysql =newMySqlConnection ( mysqlStr ); returnmysql;}/// <summary>/// 建立执行命令语句对象/// </summary>/// <param name="sql"></param>/// <param name="mysql"></param>/// <returns></returns>publicstaticMySqlCommand getSqlCommand ( String sql,MySqlConnection mysql ){MySqlCommand mySqlCommand =newMySqlCommand ( sql, mysql );// MySqlCommand mySqlCommand = new MySqlCommand(sql);// = mysql;returnmySqlCommand;}/// <summary>/// 查询并获得结果集并遍历/// </summary>/// <param name="mySqlCommand"></param> publicstaticvoidgetResultset ( MySqlCommand mySqlCommand ){MySqlDataReader reader = ();try{while( () ){if( ){("编号:"+ ( 0 ) +"|姓名:"+ ( 1 ) +"|年龄:"+ ( 2 ) +"|学历:"+ ( 3 ) );}}}catch( Exception ){("查询失败了!");}finally{();}}/// <summary>/// 添加数据/// </summary>/// <param name="mySqlCommand"></param> publicstaticvoidgetInsert ( MySqlCommand mySqlCommand ) {try{();}catch( Exception ex ){String message = ;("插入数据失败了!"+ message );}}/// <summary>/// 修改数据/// </summary>/// <param name="mySqlCommand"></param> publicstaticvoidgetUpdate ( MySqlCommand mySqlCommand ) {try{();}catch( Exception ex ){String message = ;("修改数据失败了!"+ message );}}/// <summary>/// 删除数据/// </summary>/// <param name="mySqlCommand"></param> publicstaticvoidgetDel ( MySqlCommand mySqlCommand ){try{();}catch( Exception ex ){String message = ;("删除数据失败了!"+ message ); }}}。
C语言数据库编程连接和操作数据库

C语言数据库编程连接和操作数据库数据库是现代软件开发的重要组成部分,它被用于存储、管理和检索大量的数据。
C语言是一种强大的编程语言,可以用于连接和操作数据库。
本文将介绍C语言数据库编程中连接和操作数据库的相关知识。
一、数据库连接连接是指在C语言中建立与数据库的连接,以便于进行后续的数据库操作。
在C语言中,连接数据库需要使用数据库连接库,如ODBC (Open Database Connectivity)或API(Application Programming Interface)。
以下是连接数据库的基本步骤:1. 引入数据库连接库:在C语言程序中,我们需要引入适当的数据库连接库。
根据所使用的数据库类型,常见的连接库有libmysqlclient (用于连接MySQL数据库)、libpq(用于连接PostgreSQL数据库)等。
2. 设置连接参数:在建立数据库连接之前,我们需要设置连接所需的参数,如数据库名称、用户名、密码、主机地址等。
这些参数可以通过配置文件或用户输入来获取。
3. 建立连接:通过调用库提供的连接函数,按照设置好的参数建立与数据库的连接。
连接成功后,我们就可以进行后续的数据库操作了。
二、数据库操作连接建立成功后,我们可以通过C语言进行各种数据库操作,如查询数据、插入数据、更新数据、删除数据等。
以下是C语言进行数据库操作的基本步骤:1. 执行SQL语句:在C语言程序中,我们可以通过执行SQL语句来进行数据库操作。
SQL语句可以是查询语句(SELECT)、插入语句(INSERT INTO)、更新语句(UPDATE)或删除语句(DELETE FROM)等。
2. 绑定参数:在执行SQL语句之前,我们需要将需要传递给SQL语句的参数进行绑定。
参数可以是常量值,也可以是用户输入的变量值。
3. 执行操作:通过调用库提供的函数,执行SQL语句并获取返回结果(如果有)。
执行操作可能会返回查询结果集、受影响的行数等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用C语言操作MySQL数据库1.连接数据库。
从C语言连接MySQL数据库包含两个步骤:a)初始化连接句柄结构;b)实际创建连接。
首先使用mysql_init初始化连接句柄:MYSQL * mysql_init (MYSQL *);通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。
如果传递一个已有的结构,他将被重新初始化。
如果出错,返回NULL。
初始化成功后,则使用mysql_real_connect来创建一个实际的连接:MYSQL * mysql_real_connect(MYSQL * connection,const char * server_host,const char * sql_user_name,const char * sql_password,const char *db_name,unsigned int port_number,const char * unix_socket_name,unsigned int flags);connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机,可以使用localhost来优化连接类型。
port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。
如果无法连接,返回NULL。
完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。
void mysql_close(MYSQL * connection);现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。
内容如下:#include <stdlib.h>#include <stdio.h>#include "mysql.h"int main (int argc, char *argv[]){MYSQL *conn_ptr;conn_ptr=mysql_init(NULL); //连接初始化if(!conn_ptr){fprintf(stderr, "mysql_init failed\n");return EXIT_FAILURE;}conn_ptr = mysql_real_connect(conn_ptr, "localhost", "moldao","newpassword","moldao_test", 0, NULL, 0);//建立实际连接//参数分别为:初始化的连接句柄指针,主机名(或者IP),用户名,密码,数据库名,0,NULL,0)后面三个参数在默认安装mysql>的情况下不用改if(conn_ptr){printf("Connection success\n");}else {printf("Connection failed\n");}mysql_close(conn_ptr); //关闭连接return EXIT_SUCCESS;}然后编译:#gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1connect1.c:4:19: 错误:mysql.h:没有那个文件或目录提示是没有找到mysql.h,产生这个错误的原因是没有mysql.h文件,它在mysql-devel包中,需要安装这个包:sudo yum install mysql-devel -y然后找一下:#locate mysql.h/usr/include/mysql/mysql.h这样就可以找到这个头文件了(-I的含义是在指定位置搜索头文件,参见man gcc)。
再次尝试编译:#gcc -I/usr/include/mysql connect1.c -lmysqlclient -o connect1 /usr/bin/ld: cannot find -lmysqlclientcollect2: ld 返回1链接库有问题,找不到mysqlclient链接库,man gcc发现可以在后面用-L指定搜索位置,于是我们先找到mysqlclient库的位置:locate *mysqlclient*/usr/lib/mysql/libmysqlclient.a/usr/lib/mysql/libmysqlclient.so/usr/lib/mysql/libmysqlclient.so.15/usr/lib/mysql/libmysqlclient.so.15.0.0/usr/lib/mysql/libmysqlclient_r.a/usr/lib/mysql/libmysqlclient_r.so/usr/lib/mysql/libmysqlclient_r.so.15/usr/lib/mysql/libmysqlclient_r.so.15.0.0这样找到位置就可以编译了:gcc -I/usr/include/mysql connect1.c -lmysqlclient -L/usr/lib/mysql -o connect1编译成功,于是就可以运行了,在此之前,确保mysqld已经在运行了:sudo /etc/rc.d/init.d/mysqld restart然后执行生成的可执行文件:./connect1Connection success打印出了我们设计好了的连接成功的打印信息。
这样就通过C语言进入了MySQL数据库了。
###########################################在以上这一段编译这个connect1.c的文件过程了,出过两次错误,分别记录如上,看起来##解决的办法很简单,但是自己当时确实是很迷茫,不知什么原因,网上搜索的结果大都不得##要领,最终还是靠自己静下心来看gcc的手册,man gcc才解决。
##P.S. man gcc真长。
要冷静!###########################################2. 操作数据库进入数据库中之后,就可以开始对数据库进行读写操作了。
数据库的主要操作包括select, insert, update, delete四种。
a)sql语句的嵌入:执行SQL语句的主要API函数是:int mysql_query(MYSQL *connection, const char * query)接受已经建立的连接结构指针和文本字符串形式的有效SQL语句(句末不用分号)。
成功返回0。
还有一个比较重要的函数,mysql_affected_rows(),他返回无符号类型,当使用printf时,推荐使用%lu格式将其转换为无符号长整型。
此函数返回受之前执行的update,delete,insert等查询影响的行数。
my_ulonglong mysql_affected_rows(MYSQL *connection);MySQL返回被一个更新操作修改的行数,但其他许多数据库将仅仅因为记录匹配where字句而把它视为已经更新过。
通常对于mysql_函数,返回值0表示没有行受到影响,正数则是实际的结果,一般表示受语句影响的行数。
b)select语句的使用:select语句是SQL语句中使用最频繁的操作。
一个完整的提取数据过程应该包含以下四个步骤:执行查询,提取数据,处理数据,清理。
使用mysql_query来发送SQL语句,使用mysql_store_result或者mysql_use_result来提取数据。
然后使用mysql_fetch_row调用来处理数据,最后,使用mysql_free_result来释放查询占用的内存资源。
mysql_use_result和mysql_store_result都是返回一个指向结果集结构(result set structure)的指针,如果失败则返回NULL。
区别在于store将查询到的数据库中的结果直接放在这个结果集中,而use则不直接将最终数据库的数据结果放在这个结果集中。
store其实就是把数据直接读到本地内存中,因此它比较适合数据量较小的查询。
use则类似于一种流的操作,并不是一次就返回所有的结果。
因此,对于这个结果集,必须反复调用mysql_fetch_row直到提取所有的数据。
1)一次获取所有的数据:MYSQL_RES *mysql_store_result(MYSQL *connection);在成功调用mysql_query之后使用此函数,将立即保存在客户端中返回的所有数据,并将指向此结果集的指针返回。
如果失败则返回NULL。
成功之后,可以用mysql_num_rows来得到返回记录的数目,一般应该是个正数,若没有返回行匹配,则返回0.my_ulonglong mysql_num_rows(MYSQL_RES *result);现在得到来数据,可使用mysql_fetch_row来处理它,也可以使用mysql_data_seek,mysql_row_seek和mysql_row_tell在数据集中来回移动。
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);此函数从上面得到的结果集中提取一行,并把它放在一个行结构中。
当数据用完或者出错时返回NULL。
void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);此函数允许结构集当前指针的跳转,设置会被下一个mysql_fetch_row操作返回的行。
offset是行号,在0到总行数减1的范围内。
传递0,则返回初始位置。
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result);此函数返回结果集的当前位置。
不能把它用于mysql_data_seek。
完成来对数据的所有操作之后,必须调用mysql_free_result来让MYSQL数据库完成善后处理。
void mysql_free_result(MYSQL_RES *result);--------------------------------------使用范例---------------------------------------------------------MYSQL my_connection;MYSQL_RES *res_ptr;MYSQL_ROW sqlrow;mysql_init(&my_connection);if(mysql_real_connect(&my_connection, "localhost", "moldao","password","moldao_test", 0, NULL, 0)){printf("Connection success\n");res = mysql_query(&my_connection, "select * from children where age < 10");if(res){printf("select error: %s\n", mysql_error(&my_connection));}else {res_ptr = mysql_store_result(&my_connection);if(res_ptr){printf("Retrieved %lu rows\n", (unsigned long)mysql_num_rows (res_ptr));while (sqlrow = mysql_fetch_row(res_ptr)){unsigned int field_count;field_count =0;while(field_count < mysql_field_count(&my_connection)){printf("%s ", sqlrow[field_count]);field_count++;}}if(mysql_errno(&my_connection)){printf("Retriveerror : %s\n", mysql_error(&my_connection));}}mysql_free_result(res_ptr);}mysql_close(&my_connection);---------------------------------------------------------------------------------------------------2)一次提取一行数据建议使用这种提取数据的方式。