MFC,C++,C程序与MySql数据库连接,库函数

MFC,C++,C程序与MySql数据库连接,库函数
MFC,C++,C程序与MySql数据库连接,库函数

C++程序与MySql数据库连接

——陈绍钦csq 有很多种技术可以让C++程序利用数据库:ODBC、DB、DAO、ADO、API等,ODBC是传统的方法功能强大,ADO比较便捷,并逐渐代替了DAO。对于mysql数据库来说,其提供的API函数和PHP中mysqli函数相差不大,毕竟mysql是用c语言写的,可以说懂得了PHP和mysql的结合,就懂得了c++与mysql的结合。以下是C++程序里利用mysql数据库的简略说明。

一、MySQL的安装

可以考虑安装mysql-5.0.41-win32(可到https://www.360docs.net/doc/c19385298.html,/soft/3573.htm处下载),当然你有更新的版本更好,注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。安装后期会进行服务器配置,你可以设置你的服务器登陆密码,也可以不设置密码。

二、VC6.0的设置

(1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQL的include目录路径。(我的是D:/Program Files/MySQL/MySQL Server 5.0/include)。

(2)在上面说到的“Show directories for:”下拉列表中选中“Library files”,然后添加你本地安装MySQL的Lib 目录路径。Lib目录下还有debug和opt两个目录,建议选debug。(我的是D:/Program Files/MySQL/MySQL Server 5.0/lib/debug)。

(3)在“Project settings->Link:Object/library modules”里面添加“libmysql.lib”。

(4)在stdafx.h里面添加如下的内容:

#include "winsock.h"

#include "mysql.h"

#pragmacomment(lib,"libmySQL.lib")

(5)建议将“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目录下。

三、数据库、表的创建

打开“开始->所有程序->MySQL->MySQL Server 5.0->MySQL Command Line Client.exe”,如果没有设置密码就直接按回车,会提示服务器启动成功。

mysql> SHOW DATABASES; //显示所有的数据库,注意一定要敲“;”后再按回车

mysql> CREATE DATABASE mydb; //创建数据库

mydbmysql> USE mydb; //选择你所创建的数据库

mydbmysql> SHOW TABLES; //显示数据库中的表

mysql> CREATE TABLE mytable (username VARCHAR(100), visitelist VARCHAR(200),remark VARCHAR(200)); //创建一个表mytable: 用户名;访问列表;

备注:mysql> DESCRIBE mytable; //显示表的结构

四、VC编程

MYSQL mysql; //数据库连接句柄

mysql_init (&mysql);

if(!mysql_real_connect(&mysql,"localhost","root",NULL,"mydb",3306,NULL,0)) //mydb为你所创建的数据库,3306为端口号,可自行设定;若mysql不是本地服务器,所用的mysql用户必须能远程登录及其他必要的权限(比如select、update、delete的使用),若连接错误代码为10061,可在mysql服务器(此为linux)运行netstat –anp 查看mysql正在监听的IP及端口,若为127.0.0.1即只监听本机,可在my.ini或my.caf文件中修改为0.0.0.0

{ AfxMessageBox("数据库连接失败"); return FALSE;}

(1)实现添加功能

CString strUsername,strList,strRemark,strSQL;

strSQL.Format("insert into mytable(username,visitelist,remark) values(/'%s/',/'%s/',/'%s/')",

strUsername,strList,strRemark); //注意一定要写在一行,而且必须要有if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0)

{ AfxMessageBox("增添失败"); }

(2)实现修改功能

CString strUsername,strList,strRemark,strSQL,str_PreName; //str_PreName用于记录想要修改的行,详情请看源代码

strSQL.Format("update mytable set username=/'%s/',visitelist=/'%s/',remark=/'%s/' where

username=/'%s/'",strUsername,strList,strRemark,str_PreName);

if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0)

{ AfxMessageBox("修改失败"); }

(3)实现删除功能

CString strSQL;

strSQL.Format("delete from mytable where username=/'%s/'",str_PreName); //必须要有

if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0)

{ AfxMessageBox("删除失败"); }

(4)读取表格内容到CListCtrl控件m_list

m_list.DeleteAllItems();

char *ch_query;ch_query="select * from mytable";

if(mysql_real_query(&mysql,ch_query,(UINT)strlen(ch_query))!=0)

{AfxMessageBox("数据库中表格出错"); }

CString str;

MYSQL_RES *result;

MYSQL_ROW row;

if(!(result=mysql_use_result(&mysql)))

{ AfxMessageBox("读取数据集失败"); }

int i=0;

while(row=mysql_fetch_row(result))

{

str.Format("%s",row[0]);

m_list.InsertItem(i,str);

str.Format("%s",row[1]);

m_list.SetItemText(i,1,str);

str.Format("%s",row[2]);

m_list.SetItemText(i,2,str);

i++;

}

mysql_free_result(result);

(5)关闭数据库:mysql_close(&mysql); //最好写到OnDestroy()函数中

五、结束语

本文在几位网友的工作基础上详细介绍了MySQL的安装、调试,以及如何用VC进行编译,实现数据的“添加、修改、删除”等功能,可以为在MySQL的VC编程中感到困惑的朋友们提供一点帮助,在此向几位网友表示感谢!

values()里面的符号应该为/'%s/',为单引号。

更多MYSQL库函数请访问:https://www.360docs.net/doc/c19385298.html,/books/mysqlmanual/manual_toc.html

Mysql.h 库函数(重要的函数已加粗):

20.4.1 mysql_affected_rows ()返回受到最后一个UPDATE、DELETE或INSERT查询影响(变化)的行数。

20.4.2 mysql_close ()关闭一个以前打开了的连接。

20.4.3 mysql_connect ()该函数不推荐使用,而更好使用mysql_real_connect()

20.4.4 mysql_change_user ()

20.4.5 mysql_create_db ()这个函数不推荐,而最好使用mysql_query()发出一条SQL CREATE DATABASE语句

20.4.6 mysql_data_seek ()在一个查询结果集合中定位任意行。

20.4.7 mysql_debug ()

20.4.8 mysql_drop_db ()这个函数不推荐,而最好使用mysql_query()发出一条SQL DROP DATABASE语句。

20.4.9 mysql_dump_debug_info ()

20.4.10 mysql_eof ()这个函数不推荐,而使用mysql_errno()或mysql_error()。

20.4.11 mysql_errno ()无错则返回零,返回最近调用的可能成功或失败的API函数的错误代码,下同

20.4.12 mysql_error ()无错则返回空

20.4.13 mysql_escape_string ()

20.4.14 mysql_fetch_field ()返回作为一个MYSQL_FIELD结构的一个结果集合的一个列的定义,重复调用这个函数在结果集合中检索所有关于列的信息。当没有剩下更多的字段时,mysql_fetch_field()返回NULL

20.4.15 mysql_fetch_fields ()返回一个结果集合的所有MYSQL_FIELD结构的数组。每个结构提供结果结合中一列的字段定义

20.4.16 mysql_fetch_field_direct ()

20.4.17 mysql_fetch_lengths ()返回在结果集合内的当前行的列长度

20.4.18 mysql_fetch_row ()检索一个结果集合的下一行

20.4.19 mysql_field_count ()返回在连接上的最近查询的列的数量

20.4.20 mysql_field_seek ()将字段光标设置到给定的偏移量

20.4.21 mysql_field_tell ()返回用于最后一个mysql_fetch_field()的字段光标的位置

20.4.22 mysql_free_result ()释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为一个结果集合分配的内存

20.4.23 mysql_get_client_info ()返回代表客户库的版本的字符串

20.4.24 mysql_get_host_info ()返回描述正在使用的连接类型的字符串,包括服务其主机名

20.4.25 mysql_get_proto_info ()返回当前连接使用的协议版本

20.4.26 mysql_get_server_info ()

20.4.27 mysql_info ()

20.4.28 mysql_init ()分配或初始化适合mysql_real_connect()的一个MYSQL对象

20.4.29 mysql_insert_id ()返回由先前的查询为一个AUTO_INCREMENT列生成的ID

20.4.30 mysql_kill ()要求服务器杀死由pid指定的线程

20.4.31 mysql_list_dbs ()

20.4.32 mysql_list_fields ()

20.4.33 mysql_list_processes ()返回一个描述当前服务器线程的结果集合

20.4.34 mysql_list_tables ()

20.4.35 mysql_num_fields ()在结果集合中返回列的数量

20.4.36 mysql_num_rows ()在结果集合中返回行的数量

20.4.37 mysql_options ()

20.4.38 mysql_ping ()检查到服务器的连接是否正在工作。如果它关闭了,自动尝试一个再连接。

20.4.39 mysql_query ()执行指向空终止的字符串query的SQL查询,查询必须由一个单个的SQL语句组成

20.4.40 mysql_real_connect ()试图建立到运行host的一个MySQL数据库引擎的一个连接

20.4.41 mysql_real_query ()执行由query指向的SQL查询,它应该是一个length个字节的字符串

20.4.42 mysql_reload ()要求MySQL服务器再次装载授权表。连接的用户必须拥有reload权限,不推荐这个函数。最好使用mysql_query()发出一条SQL FLUSH PRIVILEGES语句

20.4.43 mysql_row_seek ()设置行光标为在结果集合中的任意行

20.4.44 mysql_row_tell ()返回为了mysql_fetch_row()的行光标的当前位置

20.4.45 mysql_select_db ()

20.4.46 mysql_shutdown ()让数据库服务器关闭。连接的用户必须有shutdown权限

20.4.47 mysql_stat ()返回包含类似于由mysqladmin status命令提供的信息的一个字符串

20.4.48 mysql_store_result ()详——下

20.4.49 mysql_thread_id ()返回当前连接的线程ID

20.4.50 mysql_use_result ()详——下

对于成功地检索数据的每个询问(SELECT、SHOW、DESCRIBE、EXPLAIN),你必须调用mysql_store_result()或mysql_use_result()。

mysql_store_result()读取一个到客户的查询的全部结果,分配一个MYSQL_RES结构,并且把结果放进这个结构中。

(空结果集合不同于一个NULL返回值。)一旦你调用了mysql_store_result(),如果没有行返回,返回一个空集合集合。

你可以调用mysql_num_rows()找出结果集合中有多少行。你能调用mysql_fetch_row()从结果集合中取出行,或mysql_row_seek()和mysql_row_tell()结果集合中获得或设置当前的行位置。

一旦你用完结果集合,你必须调用mysql_free_result()。

mysql_use_result()初始化一个结果集合的检索,但不真正将结果集合读入客户,就象mysql_store_result()那样。相反,必须通过调用mysql_fetch_row()单独检索出每一行,这直接从服务器读出结果而不在一个临时表或

本地缓冲区中存储它,它比mysql_store_result()更快一点并且使用较少的内存。客户将只为当前行和一个可能最大max_allowed_packet字节的通信缓冲区分配内存。在另一方面,如果你在客户端对每一行正在做很多的处理,

或如果输出被送到屏幕,用户可以打一个^S(停止滚动),你不应该使用mysql_use_result()。这将阻塞服务器并

且阻止另外的线程从数据被取出的任何表中更新数据。当使用mysql_use_result()时,你必须执行

mysql_fetch_row()直到返回一个NULL值,否则未取出的行将作为下一个查询的结果集合一部分被返回。如果你忘记做这个,C API将给出错误Commands out of sync; You can't run this command now!你不能在一个从

mysql_use_result()返回的结果集合上使用mysql_data_seek()、mysql_row_seek()、mysql_row_tell()、

mysql_num_rows()或mysql_affected_rows(),你也不能发出另外的查询直到mysql_use_result()完成。(然而,在你取出所有的行以后,mysql_num_rows()将精确地返回取出的行数。)一旦你用完结果集合,你必须调用

mysql_free_result()。

c语言连接数据库mysql

下面是C语言连接mysql数据库简单例子: 编译方式: gcc -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ -l mysqlclient select.c -o select 源码: #include #include #include #include "/usr/local/mysql/include/mysql.h" int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "192.168.1.99"; char *user = "test"; char *password = "test_passwd"; char *database = "count"; double tvalue1 = 0.93; char st[123]; time_t s; s = time((time_t*)NULL ); sprintf(st, "%d", s); conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } char sql[1024]="SELECT * FROM money_change WHERE c_datetime <= "; strcat(sql,st); strcat(sql,"-3000 AND c_datetime > "); strcat(sql,st); strcat(sql,"-5000 AND c_type = 0 UNION ALL SELECT * FROM money_change WHERE

软件工程师的大学规划

软件工程师的大学规划 想做软件工程师的技术上需要学习计算机组成与操作系统原理、开发语言、数据库和网络等四大块的知识。实际中的开发则一般用到开发语言和数据库两部份,后面我也会对这两块着重进行介绍。 由于我们开发的管理系统基本上都是C/S模式,所以在我们对网络这部分的知识也要掌握。至少应学会如何架设一个局域网。 企业管理软件与互联网产品,基本上都是应用型的产品,不像操作系统、办公软件等基础类软件涉及大量底层技术,这也是信管电商专业的计算机方面的学习要求整体上没有计算机科学与技术、软件工程等专业高的一个原因。像计算机组成原理、操作系统原理、计算机网络、汇编语言和编译原理等课程,如果仅仅是想从事上面两种产品的开发的话,可以不用钻研得太深入。当然,这并不代表可以忽略或轻视,对所有想从事开发的人来说,这些其实都是基础,基础不打好,以后想走得更远就会很难,例如想成为架构师基本上不可能。 我们学校信管电商两个专业是不学汇编语言和编译原理这两门课的,同时在实际的开发中,基本上也用不到,但对于搞系统开发的我们来说,了解一下也是需要的,但不用太深。 基础性的东西,学习的难度比较大,好在这些课程一般都安排在大一、大二,大家有充裕的时间去钻研。 在开发语言技术当中,我们接触得最早的就是C语言和数据结构。现在实际开发当中基本不会用到C语言,但在学习C语言过程中所学习的常量、变量、运算符、表达式、条件/循环语句、数据类型、函数等概念是一切开发语言的骨架。学了C语言后,再结合数据结构这一门课程(这门课程也穿插了一些算法的讲解),基本上就掌握了程序开发的核心,书上常说的程序=数据结构+算法,就是这个道理。当然,这两门课程许多时候面对的都是很抽像的数学模型,学习的过程中我们就可以通过研究书本上的代码例子来理解,并尝试着将看过的例子自己用代码写出来。到了课程快结束时,老师会布置课程设计,任务一般是写一个像推箱子游戏这样的比较综合的小软件,这个时候,如果自己不会的,就要找别人的代码来研究,然后尝试着自己再写一次。开发技术基本都这样,单靠看是掌握不了的,还得动手,动手的过程中可以通过研究别人的代码来获得一种思路。 我们学校08、09级的信管、电商两个专业都是在大一第二学期学习C语言,并且相对来说信管的要求会高一些。由于我们系的发展发向是偏向管理系统(从专业名称也可知),所以我们的课程设计基本上都是管理系统,很少会做推箱子、贪吃蛇类的小游戏软件。而在课程设计的过程中同于需要我们自己动手敲写代码(只复制别人代码的人需要注意了!),所以是我们真正能学习到C语言的时候,我们的编程思维和编程习惯也是在这时开始培养起来的,因此一定要重视第一次的课程设计。数据结构电商是大二第一学期学习,信管是大二第二学期学习。学习这门课程一定需要有C语言的基础,不然学起来会相当费力。电商专业的学生会好一点,毕竟上一个学习才学了C语言,不会遗忘得太多,而信管专业的人就要注意了,由于大二第一学期基本上只学数学类的课程,没什么机会再次接触编程,所以要求信管的学生,在大二第一学期最后自已有空的时候复习一下C语言,或者先学习一些别的较先进的编程语言,如

c语言连接数据库

使用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 #include #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;

关于软件开发工程师与软件测试工程师职位对比

关于软件开发工程师及软件测试工程师 的职位对比 一、职位定义: 软件开发工程师:软件开发工程师是从事软件开发相关工作的人员的统称。它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位。这些岗位的分工不同,职位和/或级别不同,但工作内容都是与软件开发生产相关的。软件开发工程师是IT行业需求量最大的职位。软件开发工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)、.NET平台技术、C#、C/S B/S程序开发,还有诸多如JAVA SCRIPT、AJAX、HIBERNATE、SPRING、J2EE、WEB SERVICE、STRUTS等前沿技术。 软件测试工程师:指理解产品的功能要求,并对其进行测试,检查软件有没有错误,决定软件是否具有稳定性,写出相应的测试规范和测试用例的专门工作人员。简而言之,软件测试工程师在一家软件企业中担当的是“质量管理”角色,及时纠错及时更正,确保产品的正常运作。按其级别和职位的不同,分为三类(高级软件测试工程师、中级软件测试工程师、初级软件测试工程师)。 二、职位介绍(JD) 软件开发工程师: 招聘.net软件开发工程师 公司名称:北京智友信诚科技有限公司 职位要求:职位要求:任职条件: 1、计算机相关专业,大专以上学历。 2、精通.NET或者VB6.0其一即可。 3、必须具有SQL Server数据库开发经验者。 4、善于学习,沟通,理解力强,有团队精神。 5、为人诚信,思维严谨,工作主动,能承受一定的工作压力。 中软国际招聘JAVA软件开发工程师 职位要求 1. 211院校2012年毕业的优秀本科生; 2. 电子或者通信或者计算机或者软件工程专业,有相关项目经验者优先; 3. 具有JAVA开发经验,精通WEB应用开发,如Struts、Hibernate、Spring等; 4. 熟悉IBM J2EE体系(WAS、DB2、MQ); 5. 英语六级,具有良好的英语读写能力,英语听说能力佳者优先考虑; 6. 思维逻辑清晰,有钻研精神,对现有程序逻辑、代码具有快速学习的能力和独立研究问题的能力。

黑马程序员C语言教程mysql中的索引

黑马程序员C语言教程m y s q l中的索引 Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】

M y S Q L数据库中的索引在数据库操作中,经常需要查找特定的数据,例如:当执行“select * from student where id = 10000”语句时,MySQL数据库必须从第一条记录开始遍历,直到找到id为10000的数据。这样的效率非常低。为此,MySQL允许建立索引来加快数据表的查询和排序。 索引的概念 数据库的索引好比字典的目录,是对数据库表中一列或者多了的值进行排序后的一种结构,其作用就是提高表中的数据查询速度。MySQL中的索引分为很多种,具体如下。 1.普通索引 普通索引是由key或index定义个索引,它是MySQL中的基本索引类型,可以创建在任何数据类型中。其值是否唯一和非空有字段本身的约束条件所决定。例如,在student表的id字段上建立一个普通索引,查询记录时,就可以根据该索引查询,从而提高效率。 2.唯一性索引 唯一性索引是指由unique定义个索引,该索引所在字段的值必须是唯一的。例如,在grade表的stu_id字段上建立唯一性索引,那么stu_id字段的值就必须是唯一的。 3.全文索引 全文索引是由fulltext定义的索引,它只能创建在char、varchar或text类型的字段上。并且现在只有MyISAM存储引擎支持全文索引。 4.单列索引

单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只有保证该索引只对应表中一个字段即可。 5.多列索引 多列索引是指在表的多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。如,在student表的id、name和score字段上创建一个多列索引,那么只有查询条件中使用了id字段时,该索引才会被使用。 相较于单列索引,当我们频繁的需要同时检索表中多列时,多列索引的效率会高很多。 6.空间索引 空间索引是由spatial定义的索引,它只能创建在空间数据类型的字段上。MySQL 中的空间数据类型有4种:geometry、point、linestring和polygon。需要注意的是,创建空间索引的字段,必须将其声明为NOT NULL,并且空间索引只能在存储引擎为MyISAM的表中创建。 需要注意的是,虽然索引可以提高数据的查询效率,但索引会占用一定的存储空间。并且创建和维护索引所消耗的时间,是随着数据量的增加而增加的。因此,使用索引时,应综合考虑其优缺点,不能肆意创建。 创建索引 要想使用索引提高数据表的访问速度,首先要创建一个索引。创建索引的方式大致可分为三种。

c语言mysql编程

C语言mysql编程 先给出一个简单的代码:可以实现最简单的数据库连接: #include #include #include static void output_error(MYSQL * mysql); int main() { MYSQL mysql ;// 代码1 const char *host="localhost"; const char *user="root"; const char *password="zjh171"; const char *database="renshi"; const int port=3306; const char *socket=NULL; const int flag = 0; mysql_init(&mysql);// 代码2 mysql_real_connect(&mysql,host,user,password,database,port,socket,flag) return 0; } 代码1: 先看看MYSQL 是什么: typedef struct st_mysql { NET net; /* Communication parameters */ unsigned char *connector_fd; /* ConnectorFd for SSL */ char *host,*user,*passwd,*unix_socket,*server_version,*host_info; char *info, *db; struct charset_info_st *charset; MYSQL_FIELD *fields; MEM_ROOT field_alloc; my_ulonglong affected_rows; my_ulonglong insert_id; /* id if insert on table with NEXTNR */ my_ulonglong extra_info; /* Not used */ unsigned long thread_id; /* Id for connection in server */ unsigned long packet_length; unsigned int p ort; unsigned long client_flag,server_capabilities;

C语言连接MySQL数据库

C语言连接MySQL数据库收藏 前几天公司让我做C语言和MySQL数据库的交互操作,费了九牛二虎之力之后总算做出来了,今天特地把源代码贴出来供大家学习;如有人想要打包项目可以加我QQ260990509,注明技术交流,即可获得打包之后的项目! #if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译 #include #endif #include #include #include "mysql.h" #include #include #include MYSQL mysql,*sock; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数 MYSQL_RES *res; //查询结果集,结构类型 MYSQL_FIELD *fd ; //包含字段信息的结构 MYSQL_ROW row ; //存放一行查询结果的字符串数组 char qbuf[300]; //存放查询sql语句字符串 //定义数据库操作的宏,也可以不定义留着后面直接写进代码 #define MAX_STRING_LENGTH 256 //定义元素个数 #define MAX_ELEMENT_LENGTH 33 //定义显示的列数 #define ELEMENTS_PER_LINE 15 typedef struct { char line[MAX_STRING_LENGTH]; char data[ELEMENTS_PER_LINE][MAX_ELEMENT_LENGTH]; }DATA; void main() { //申明数据库操作函数 int insertData(DATA parameter); //打开指定文件 FILE *fp=fopen("E:\\file.txt","r"); //创建结构体类型实体 DATA data; memset(&data, 0x00, sizeof(DATA)); //得到一行数据 fgets(data.line, MAX_STRING_LENGTH, fp);

linux下C语言连接mysql数据库

/* * 需先安装mysqlclient库 * linux下C语言连接mysql的样例 * */ #include #include #include void create(MYSQL *conn_ptr) { int ret; ret = mysql_query(conn_ptr,"create table tl(ID INT,name CHAR(5),birthday DATE,primary key(ID)) "); if (ret) { fprintf(stderr,"error: %s\n",mysql_error(conn_ptr)); } else { printf("Create correct!\n"); } } void insert(MYSQL *conn_ptr) { int ret; ret = mysql_query(conn_ptr,"insert into tl(ID,name,birthday) values(10000,'lv','1989-02-09')"); if (ret) { fprintf(stderr,"error: %s\n",mysql_error(conn_ptr)); } else { printf("Insert correct!\n"); } } void output(MYSQL *conn_ptr) {

//函数返回状态 int ret = 0; //查询结果集 MYSQL_RES *res = NULL; //1行数据的"类型安全"表示,为计数字节、字符串的数组 MYSQL_ROW row = NULL; //包含字段的相关信息,如字段名,类型和大小等 MYSQL_FIELD *field; //向服务器发送执行语句 ret = mysql_query(conn_ptr,"select * from tl"); if (ret) { //输出错误信息 fprintf(stderr,"error: %s\n",mysql_error(conn_ptr)); } else { //客户端处理结果集的2种方式之一:一次性的检索整个结果集 res = mysql_store_result(conn_ptr); if (res) { //结果集的字段数 int colNum = mysql_num_fields(res); //获取结果集的下一个字段的相关信息 while ( field = mysql_fetch_field(res) ) { //字段名,如果用AS子句为该字段指定了别名,名称的值也是别名 printf("field_name: %s\n",field->name); //原始字段名,忽略别名 printf("field_org_name: %s\n",field->org_name); //包含该字段的表名,如果用AS子句为该表指定了别名,名称的值也是别名 printf("table_name: %s\n",field->table); //包含该字段的原始表名,忽略别名 printf("table_ord_name: %s\n",field->org_table); //该字段类型所支持的最大长度 printf("the max length of this field: %lu\n",field->length); //该字段当前数据中存在的最大长度 printf("the max length of this field in real: %lu\n",field->max_length); //用于该字段的不同"位标志"。如:不能为NULL,主键、唯一键等等

C语言C++学习指南(数据库篇)MySQL与SQLite

江西省南昌市2015-2016学年度第一学期期末试卷 (江西师大附中使用)高三理科数学分析 一、整体解读 试卷紧扣教材和考试说明,从考生熟悉的基础知识入手,多角度、多层次地考查了学生的数学理性思维能力及对数学本质的理解能力,立足基础,先易后难,难易适中,强调应用,不偏不怪,达到了“考基础、考能力、考素质”的目标。试卷所涉及的知识内容都在考试大纲的范围内,几乎覆盖了高中所学知识的全部重要内容,体现了“重点知识重点考查”的原则。 1.回归教材,注重基础 试卷遵循了考查基础知识为主体的原则,尤其是考试说明中的大部分知识点均有涉及,其中应用题与抗战胜利70周年为背景,把爱国主义教育渗透到试题当中,使学生感受到了数学的育才价值,所有这些题目的设计都回归教材和中学教学实际,操作性强。 2.适当设置题目难度与区分度 选择题第12题和填空题第16题以及解答题的第21题,都是综合性问题,难度较大,学生不仅要有较强的分析问题和解决问题的能力,以及扎实深厚的数学基本功,而且还要掌握必须的数学思想与方法,否则在有限的时间内,很难完成。 3.布局合理,考查全面,着重数学方法和数学思想的考察 在选择题,填空题,解答题和三选一问题中,试卷均对高中数学中的重点内容进行了反复考查。包括函数,三角函数,数列、立体几何、概率统计、解析几何、导数等几大版块问题。这些问题都是以知识为载体,立意于能力,让数学思想方法和数学思维方式贯穿于整个试题的解答过程之中。 二、亮点试题分析 1.【试卷原题】11.已知,,A B C 是单位圆上互不相同的三点,且满足AB AC → → =,则A BA C →→ ?的最小值为( ) A .1 4- B .12- C .34- D .1-

黑马程序员C语言教程:mysql中的索引

MySQL数据库中的索引 在数据库操作中,经常需要查找特定的数据,例如:当执行“select * from student where id = 10000”语句时,MySQL数据库必须从第一条记录开始遍历,直到找到id为10000的数据。这样的效率非常低。为此,MySQL允许建立索引来加快数据表的查询和排序。 索引的概念 数据库的索引好比字典的目录,是对数据库表中一列或者多了的值进行排序后的一种结构,其作用就是提高表中的数据查询速度。MySQL中的索引分为很多种,具体如下。 1.普通索引 普通索引是由key或index定义个索引,它是MySQL中的基本索引类型,可以创建在任何数据类型中。其值是否唯一和非空有字段本身的约束条件所决定。例如,在student表的id字段上建立一个普通索引,查询记录时,就可以根据该索引查询,从而提高效率。 2.唯一性索引 唯一性索引是指由unique定义个索引,该索引所在字段的值必须是唯一的。例如,在grade表的stu_id字段上建立唯一性索引,那么stu_id字段的值就必须是唯一的。 3.全文索引 全文索引是由fulltext定义的索引,它只能创建在char、varchar或text类型的字段上。并且现在只有MyISAM存储引擎支持全文索引。 4.单列索引 单列索引指的是在表中单个字段上创建索引,它可以是普通索引、唯一索引或者全文索引,只有保证该索引只对应表中一个字段即可。 5.多列索引 多列索引是指在表的多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。如,在student表的id、name和score字段上创建一个多列索引,那么只有查询条件中使用了id字段时,该索引才会被使用。 相较于单列索引,当我们频繁的需要同时检索表中多列时,多列索引的效率会高很多。 6.空间索引 空间索引是由spatial定义的索引,它只能创建在空间数据类型的字段上。MySQL中的空间数据类型有4种:geometry、point、linestring和polygon。需要注意的是,创建空间索引的字段,必须将其声明为NOT NULL,并且空间索引只能在存储引擎为MyISAM的表中创建。

相关文档
最新文档