版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MySQL_C_API编程实践-writtenby1MySQLC CAPIs包含在mysq库文件当中,与MySQL的源代码一块,用于连接到数据int{ ret= t,if(mysql_library_init(0,NULL,NULL))fprintf(stderr,"couldnotinitializeMySQLlibrary\n");}MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedlong_flag)unsignedintmysql_errno(MYSQL*mysql);constchar*mysql_error(MYSQL*mysql);connect=mysql_real_connect(&mysql,"localhost","root","123456","mydb2",0,NULL,0);if(connect==NULL){ret=printf("funcmysql_real_connect()err\n");returnret;}{printf(" }printf("connect:%d&mysql:%d\n",connect,&mysql);}MySQLmysq的开发头文 为/usr/include/mysqlmysqgcc- dm01_o o.c-I/usr/include/mysql-L/usr/lib64/mysql .o):Infunction .c:(.text+0x31):undefinedreferenceto.c:(.text+0x4f):undefinedreferenceto//libmysql _globallookupundefinedreferencetodm01_o.c:49:警告:初始化将指针赋给整数,未作类型转 ref. ality_v0]+0x0):undefinedreferenceto` - - - - - undefinedreferencesto`floor'followdm01_o.c:70:警告:初始化将指针赋给整数,未作类型转//导致没有 .a(net_serv.cc.o):(.data.DW.ref.gxx_ ref.gxx_ ality_v0]+0x0):undefinedreferenceto`gxx_ MySQLGCCgcc- dm01_o o.c-I/usr/include/mysql-L/usr/lib64/mysql--ldl-lpthread-lm- -MySQLmakefileLFLAGS=-L/usr/lib64/mysql-lmysql-ldl-lpthread-lm-lrt-BIN=dm01_odm02_query$(CC) -c - $(CC)$(CFLAGS) $(LFLAGS)- $(CC)$(CFLAGS) $(LFLAGS)- rm-f*.o2MySQLCAPIMYSQLCAPI1MYSQL1MYSQL 通过调用mysql_library_init(),MYSQL 通过调用mysql_init()mysql_real_connect()连接 SQL 通过调用mysql_close()MYSQL 通过调用mysql_library_end()MYSQL初始化接句柄结#includeMYSQL*mysql_init(MYSQLMYSQL*mysql_real_connect(MYSQL*connection,constchar*server_host,constchar*sql_user_name,constchar*sql_password,constchar*db_name,unsignedintport_number,constchar*unix_socket_name,unsignedintIntmysql_options(MYSQLoption_to_set,constcharunsignedintmysql_errno(MYSQLmysqlAPI函数的错误代码,该函数调用可SQLintmysql_query(MYSQL*mysql,constchar1SQL语句,而且不应为语句添加终结分号或”\g”mysql_real_query返回上次语句所涉及到记录的行对于成功检索了数据的每个查询,必须调用mysql_store_result()该函数将查询的全部结果到客户端,分配1个MYSQL_RES结构,并将 mit(MYSQL*mysql,my_bool函数说明如果模式为 启动 mit模式;如果模式为0,mit模式 mit(MYSQL 不像mysql_store_result()那样把结果集实际到客户端。它必须通过CAPI开连接时,必须将标志参数中的_MULTI_STATEMENTS选项指定给 。也可以通过调用api如果mysql指向的连接句柄。MYSQL*mysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedlong函数功能:MySQLconnect=mysql_real_connect(&mysql,"localhost","root","123456","mydb2",0,0intmysql_query(MYSQL*mysql,constcharintmysql_real_query(MYSQL*mysql,constchar*query,unsignedlongmysql_store_result()将查询的全部结果到客户端,分配1个MYSQL_RES结构,取结果集中的行,或调用mysql_row_seek()和mysql_row_l()来获取或设置结果集一旦完成了对结果集的操作,必须调用 MYSQL_RES*mysql_use_result(MYSQL*mysql)不像mysql_store_result()那样把结果集实际到客户端。它必须通过1MySQL服务器,这需要使用mysql库,MySQL的大多数客户端API(除了3MySQL的函数)中都会用到。MYSQL*mysql_init(MYSQL*mysql)constchar*user,constchar*passwd,constchar*db,unsignedintport,const*unix_socket,unsignedlong也可另式来进行连接。先用MYSQL_READ_DEFAULT_FILE作为选项名来调mysql_options(),再调用mysql_real_connect()来连接服务器;mysql_options(*mysql,MYSQL_READ_DEFAULT_FILE," mysql_real_connect(*mysql,NULL,NULL,NULL,NULL,0,NULL,0) f文件中记录了连接MySQL服务器所需的各项参数(地址,端口,用户名,密码,数据库,字符集,UnixSocket等。这样可以灵活的修改连接参数而不必重新编译voidmysql_close(MYSQL*mysql)4intmysql_query(MYSQL*mysql,constchar2)UPDATE,DELETEINSERTmysql_affected_rows()获知受影响的记录数。my_ulonglongmysql_affected_rows(MYSQL*mysql)。mysql_insert_idUPDATEINSERTmy_ulonglongmysql_insert_id(MYSQL3-1)式是通过mysql_store_result()将整个结果集全部取回来。MYSQL_RES*mysql_store_result(MYSQL*mysql)3-2)另式则是调用mysql_use_result()初始化获取操作,但暂时不取回任何记录。MYSQL_RES*mysql_use_result(MYSQL*mysql);3-3两种方法均通过mysql_fetch_row()来每一条记录MYSQL_ROWmysql_fetch_row(MYSQL_RES注意:若先前调用的是mysql_store_result(),则直接在本地记录;若先前调用mysql_use_result(),则此时才到服务器上去获取记录。4)当处理完结果集后,调用mysql__result()来释放它所占的内存。voidmysql__result(MYSQL_RES*result)。unsignedintmysql_errno(MYSQL*mysql)constchar*mysql_error(MYSQL*mysql)5.(PreparedMySQLCAPI还提供了另式来执行SQL语句,即先预处理(prepare)再执(execute).SQLMYSQL_STMT*mysql_stmt_init(MYSQL*mysql)intmysql_stmt_prepare(MYSQL_STMT*stmt,constchar*stmt_str,unsignedlongmy_boolmysql_stmt_bind_param(MYSQL_STMT*stmt,MYSQL_BIND*bind)TEXTBLOB, parameter_number,constchar*data,unsignedlonglength)intmysql_stmt_execute(MYSQL_STMTmy_ulonglongmysql_stmt_insert_id(MYSQL_STMT*stmt)来获得被改变的记录数和生my_ulonglongmysql_stmt_affected_rows(MYSQL_STMT*stmt)my_ulonglongmysql_stmt_insert_id(MYSQL_STMT*stmt)mysql_stmt_bind_result()对结果集中的字段进行绑定。my_boolmysql_stmt_bind_result(MYSQL_STMT*stmt,MYSQL_BIND*bind)intmysql_stmt_fetch(MYSQL_STMT*stmt)intmysql_stmt_store_result(MYSQL_STMT3-6,my_boolmysql_stmt_close(MYSQL_STMT*)APIunsignedintmysql_stmt_errno(MYSQL_STMT*stmt)constchar*mysql_stmt_error(MYSQL_STMT*stmt) MYSQLCAPI2.2节,调用思路分析:5预处理语句(Prepared1.mysql_stmt_init()创建预处理语句句柄。要想在服务器上准备预处理语句,mysql_stmt_prepare(SQL2.mysql_stmt_result_metadata()以获得结果集元 如果语句生成了结果集,数据缓冲,通过调 CAPI开连接时,必须将标志参数中的_MULTI_STATEMENTS选项指定给 。也可以通过调用/*Connecttoserverwithoption mysql_real_connect(...,_MULTI_STATEMENTS);/*NowexecutemultiplequeriesINSERTINTOtest_tableUPDATEtest_tableSETid=20WHEREid=10;\SELECT*FROMtest_table;\{/*Processallresultsprintf("totalaffectedrows:%lld",if(!(result={printf(stderr,"Gotfatalerrorprocessingquery\n");}process_result_set(result);/*function*/}whileMYSQL_TIME结构TIMESAMPCint{ret=0,status= mysqlmysql=mysql_real_connect(mysql,"localhost","root","123456","mydb2",0,NULL,_MULTI_STATEMENTS);if(mysql=={ret=printf("%s",printf("funcmysql_real_connect()err:%d\n",ret);returnret;}{printf(" } //////createtabletest_table(date_fielddate, time_fieldtime, timestamp);charquery[1024]="INSERTINTOtest_table(date_field,time_field,timestamp_field)if(!stmt){fprintf(stderr,"mysql_stmt_init(),outofmemory\n");}{fprintf(stderr,"\n%s",mysql_stmt_error(stmt));}/*setupinputbuffersforall3parameters*/bind[0].buffer_type=MYSQL_TYPE_DATE;bind[0].buffer=(char*)&ts;bind[0].is_null=bind[0].length=bind[1]=bind[2]=/*supplythedatatobesentinthetsstructure*/ts.year=2002;ts.month=ts.day=ts.hour=ts.minute=ts.second=//Closethestatementif{fprintf(stderr,"failedwhileclosingthestatement\n");fprintf(stderr,"%s\n",mysql_stmt_error(stmt));}}2.5MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过 mit=1mysqlINNODBMYISAM#define #define #defineUNSET_TRAN #defineCOMMIT_TRAN #define {intret=ret=mysql_query(mysql,BEGIN_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}ret=mysql_query(mysql,SET_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}return}{intret=ret=mysql_query(mysql,ROLLBACK_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}ret=mysql_query(mysql,if(ret!={printf("funcmysql_query()err:%d\n",ret);returnret;}return} mit(MYSQL{intret=ret=mysql_query(mysql,COMMIT_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}ret=mysql_query(mysql,UNSET_TRAN);if(ret!=0){printf("funcmysql_query()err:%d\n",ret);returnret;}return}#definesql01"INSERTINTOtest_table(col1,col2,col3)VALUES(10,'10','1')"#definesql02"INSERTINTOtest_table(col1,col2,col3)VALUES(20,'20','2')"#definesql03"INSERTINTOtest_table(col1,col2,col3)VALUES(30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025四川启赛微电子有限公司招聘销售内勤岗位测试笔试历年典型考点题库附带答案详解
- 2025四川内江人和国有资产经营有限责任公司招聘笔试及笔试历年常考点试题专练附带答案详解
- 2025云南省水利水电工程有限公司招聘2人笔试历年难易错考点试卷带答案解析
- 2025-2026学年山雨教案网站电影
- 2024-2025学年医师定期考核高分题库附完整答案详解【夺冠系列】
- 2026四川成都彭州市丽春镇卫生院(彭州市第六人民医院)招聘编外人员3人笔试备考试题及答案解析
- 2025下半年四川内江市隆昌市兴晟产业投资集团有限公司招聘笔试及笔试历年常考点试题专练附带答案详解
- 2026四川成都交通投资集团有限公司第一批次社会招聘8人笔试备考试题及答案解析
- 2026江西南昌市西湖区图书馆招聘1人笔试模拟试题及答案解析
- 2026国药控股菱商医院管理服务(上海)有限公司招聘院内SPD专员4人考试备考题库及答案解析
- TCAPC 011-2024 零售药店经营自体嵌合抗原受体T细胞(CAR-T)治疗药品服务规范
- 《电子商务基础》课件-电子商务概念
- 小学数学课程标准(2022)解读
- 牧场上的家童声合唱谱小荧星
- 联芳园区规划小学新建工程项目
- 02324 离散数学 密训资料
- NB-T 10993-2022 风力发电机组 焊接机架
- 商铺租赁合同模板协议书
- 21 自然界和社会
- 同等学力申硕英语大纲词汇(第六版)
- 国家公务员考试准考证模板
评论
0/150
提交评论