您的位置:

c语言编写mysql程序(c语言mysql教程)

本文目录一览:

mysql数据库

MySQL数据库一般指MySQL,MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发。

mysql是目前网站以及APP应用上用得较多的一个开源的关系型数据库系统,可以对数据进行保存,分段化的数据保存,也可以对其数据进行检索,查询等功能的数据库。

默认的mysql数据库中存有一个库这个就是mysql的系统数据库,可以对其保存系统的数据包括mysql数据库的信息,数据库root账号,普通账号,以及数据库的名称,还有数据库的一些表还有一些数字型的数据类型结构都会有所保存。

mysql数据库的优点

(1)MySQL数据库是用C和C++语言编写的,并且使用了多种编辑器进行测试,以保证源码的可移植性。

(2)支持多个操作系统例如:Windows、Linux、Mac OS等等。

(3)支持多线程,可以充分的利用CPU资源。

(4)为多种编程语言提供API,包括C语言、Java、PHP、Python语言等。

(5)MySQL优化了SQL算法,有效的提高了查询速度。

(6)MySQL内提供了用于管理,检查以及优化数据库操作的管理工具。

(7)它能够作为一个单独的应用程序应用在客户端服务器网络环境中,也可以作为一个库嵌入到其他的软件中并提供多种语言支持。

mysql查询语句 C语言

#ifdef WIN32

#include windows.h

#include odbcinst.h

#include sqlext.h

#else

#include mysql.h

#include unistd.h

#define SQLHANDLE static MYSQL

#endif

#include stdarg.h

#include stdlib.h

#include stdio.h

#include string.h

SQLHANDLE hDBEnv, hDBC;

int DB_Open(char * dbcn, char * usr, char * pwd)

{

int r;

#ifdef WIN32

r = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hDBEnv);

if(r) return 0;

r = SQLSetEnvAttr(hDBEnv,SQL_ATTR_ODBC_VERSION,

(void*)SQL_OV_ODBC3,0);

if(r) return 0;

r = SQLAllocHandle(SQL_HANDLE_DBC, hDBEnv, hDBC);

if(r) return 0;

r = SQLConnect(hDBC,

(unsigned char *)dbcn, strlen(dbcn),

(unsigned char *)usr, strlen(usr),

(unsigned char *)pwd, strlen(pwd));

return r==SQL_SUCCESS || r==SQL_SUCCESS_WITH_INFO;

#else

mysql_init(hDBC);

MYSQL * rx = mysql_real_connect(

hDBC, dbcn, usr, pwd, NULL, 0, NULL, 0);

if(!rx) return 0;

return 1;

#endif

}//end DB_Open

int DB_Exec(char * sql)

{

#ifdef WIN32

SQLHANDLE hStatement = NULL;

SQLAllocHandle(SQL_HANDLE_STMT, hDBC, hStatement);

SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));

SQLCloseCursor(hStatement);

SQLFreeHandle(SQL_HANDLE_STMT, hStatement);

hStatement = NULL;

#else

mysql_real_query (hDBC, sql, strlen(sql));

#endif

return 1;

}//end DB_Exec

int DB_Close(void)

{

#ifdef WIN32

SQLDisconnect(hDBC);

SQLFreeHandle(SQL_HANDLE_DBC, hDBC);

SQLFreeHandle(SQL_HANDLE_ENV, hDBEnv);

#else

mysql_close(hDBC);

#endif

return 1;

}//DB_Close()

#ifndef WIN32

typedef struct tagMySQLRecordset {

MYSQL_RES * hRecord;

void * * row;

int * size;

int cols;

} MYSQLRecordset;

#endif

void DB_CleanQuery(void *hRecordset)

{

if(!hRecordset) return;

#ifdef WIN32

__try {

SQLCloseCursor(hRecordset);

SQLFreeHandle(SQL_HANDLE_STMT, hRecordset);

hRecordset = NULL;

}__finally{

return;

}//end try

#else

MYSQLRecordset * hRec = (MYSQLRecordset *) hRecordset;

mysql_free_result (hRec-hRecord);

free(hRec-row); hRec-row = NULL;

free(hRec-size); hRec-size = NULL;

free(hRec); hRec = NULL;

#endif

}//end DB_CleanQuery

int DB_Next(void * hRecordset)

{

int r=0; if(!hRecordset) return 0;

#ifdef WIN32

r = SQLFetch(hRecordset);

r = r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;

if(!r) {

DB_CleanQuery(hRecordset);

}//end if

#else

MYSQLRecordset * hRec = (MYSQLRecordset *) hRecordset;

MYSQL_ROW row = mysql_fetch_row (hRec-hRecord);

if(row) {

for(int i=0; ihRec-cols; i++) {

memcpy(hRec-row[i], row[i], hRec-size[i]);

}//next i

r = 1;

}else{

DB_CleanQuery(hRecordset);

r = 0;

}//end if

#endif

return r;

}//end DB_Next

int DB_params_count(const char * fmt)

{

int i=0, j=0;

while(fmt[i]) {

if(fmt[i]=='%') j++;

i++;

}//end while

return j;

}//end DB_params_count

void * DB_Query(char *sql, const char *fmt, ...)

{

int r=0;

int cols = DB_params_count(fmt);

if(cols1) return NULL;

#ifdef WIN32

SQLHANDLE hStatement = NULL;

SQLAllocHandle(SQL_HANDLE_STMT, hDBC, hStatement);

r = SQLExecDirect(hStatement,(unsigned char *)sql, strlen(sql));

r = r==SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO;

if(!r) {

return NULL;

}//end if

#else

r = mysql_real_query (hDBC, sql, strlen(sql));

if(r) return NULL;

MYSQL_RES * rec = NULL;

rec = mysql_store_result (hDBC);

if(!rec) return NULL;

MYSQLRecordset * hStatement

= (MYSQLRecordset *)malloc(sizeof(MYSQLRecordset));

if(!hStatement) return NULL;

memset(hStatement, 0, sizeof(MYSQLRecordset));

hStatement-hRecord = rec;

hStatement-cols = cols;

hStatement-row = (void **)malloc(cols * sizeof(void *));

memset(hStatement-row, 0, cols * sizeof(void *));

hStatement-size = (int *)malloc(cols * sizeof(int));

memset(hStatement-size, 0, cols * sizeof(int));

#endif

va_list ap; va_start(ap, fmt);

void * var; char buf[32];

int i=0,j=0,k=0,sz=0; char c=0;

int len = strlen(fmt); int bad=1;

#ifdef WIN32

int col=1;

#else

int col=0;

#endif

while(fmt[i]) {

c = fmt[i++];

if(c != '%') continue;

c = fmt[i++];

var = va_arg(ap, void *);

if(c == 'd') {

#ifdef WIN32

SQLBindCol(hStatement, col, SQL_C_SLONG, var, 4,NULL);

#else

hStatement-row[col] = var;

hStatement-size[col] = sizeof(long);

#endif

col++;

continue;

}//end if

if(c == 'f') {

#ifdef WIN32

SQLBindCol(hStatement, col, SQL_C_FLOAT, var, 4,NULL);

#else

hStatement-row[col] = var;

hStatement-size[col] = sizeof(float);

#endif

col++;

continue;

}//end if

memset(buf, 0, 32); bad=1;

for(j=i-1; jlen; j++) {

c = fmt[j];

if(c='0' c='9') buf[j-i+1]=c;

if(c=='s') {bad=0; k=j+1; break;}

}//next j

if(bad) return NULL;

sscanf(buf, "%d", sz);

#ifdef WIN32

SQLBindCol(hStatement, col, SQL_C_CHAR, var, sz, NULL);

#else

hStatement-row[col] = var;

hStatement-size[col] = sz;

#endif

col++;

i = k;

}//end while

va_end(ap);

return hStatement;

}//end DB_Rec

用C语言如何对MySQL数据库进行操作

有时为了性能,我们会直接用C语言来开发相关的模块,尤其在我们的web应用中,虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口,然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译。 if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译#includewindows.h#endif#includestdio.h#includestdlib.h #includemysql.h 我的机器上该文件在/usr/local/include/mysql下 定义MySQL数据库操作的宏,也可以不定义留着后面直接写进代码 defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相当于char*argv[]{MYSQL mysql,*sock;定义数据库连接的句柄,它被用于几乎所有的MySQL函数 MYSQL_RES *res;查询结果集,结构类型 MYSQL_FIELD *fd ;包含字段信息的结构 MYSQL_ROW row ;存放一行查询结果的字符串数组 char qbuf[160];存放查询sql语句字符串 if(argc!=2){//检查输入参数 fprintf(stderr,usage:mysql_selectuserid\n\n);exit(1);}mysql_init(mysql);if(!(sock=mysql_real_connect (mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){ fprintf(stderr,Couldn'tconnecttoengine!\n%s\n\n,mysql_error(mysql));perror();exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1])); if(mysql_query(sock,qbuf)){ fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock));exit(1);}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn'tgetresultfrom%s\n,mysql_error(sock));exit(1);}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res));while(row=mysql_fetch_row(res)){printf(Theruserid#%d'susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)(!strlen(row[0])))?NULL:row[0])); puts(queryok!\n);}mysql_free_result(res); mysql_close(sock);exit(0);return0;为了兼容大部分的编译器加入此行} 编译的时候,使用下面的命令 gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可选,根据您的环境情况运行的时候,执行下面的命令 ./mysql_select 1 将返回如下结果: numberoffieldsreturned:1 Theruserid#1'susernameis:Michaelqueryok!上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档源码天空 ,各个函数都有详细说明,有时间我整理一份常用的API说明出来。

求c语言操作mysql数据库实例

不知你用的是什么代码,不过据我实验,以下代码是可用的 【来自 】

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

}

连接mysql数据库需要以下步骤:

安装mysql开发包, linux下是mysql安装的时候全选就行了, linux 下直接安装mysql-devel

新建工程,占贴代码,注意修改实际的用户名、密码 ...

设置包含目录, 在windows下, 找到你的mysql安装位置,找到include文件夹, 设置ide增加该文件夹到包含目录 【可能是 C:\Program Files\MySQL\MySQL Server 5.0\include】

设置连接目录, 同设置包含目录一样 找到mysql的lib目录,设置ide 【可能是 C:\Program Files\MySQL\MySQL Server 5.0\lib\opt 】

设置连接选项, 需要设置ide连接选项,增加 -lmysql

编译连接运行