【Linux】Ubuntu下C语言访谈MySQL数据库入门

MySQL数据库连接测量试验

 

接下来利用如下C语言举行数据库连接测量检验connect1.c:

 

[cpp] view plaincopyprint?  

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include “mysql.h”  
  5.   
  6. int main(int argc,char *argv[])  
  7. {  
  8.   MYSQL *conn_ptr;  
  9.   conn_ptr = mysql_init(NULL);  
  10.   
  11.   if(!conn_ptr)  
  12.   {  
  13.     fprintf(stderr,”mysql_init failed\n”);  
  14.     return EXIT_FAILURE;  
  15.   }  
  16.   
  17.   conn_ptr = mysql_real_connect(conn_ptr,”localhost”,”rick”,”rick”,”foo”,0,NULL,0);  
  18.   
  19.   if(conn_ptr)  
  20.     printf(“Connection success\n”);  
  21.   else  
  22.     printf(“Connection failed\n”);  
  23.   
  24.   mysql_close(conn_ptr);  
  25.   
  26.   return EXIT_SUCCESS;  
  27. }  

实行结果:

 

365bet亚洲真人 1

留意的是:要求钦赐include库和库文件的路线名,以及钦定链接的库模块mysqlclient。

假使不在开始的时候安装开垦包,就能够发出如下错误:

365bet亚洲真人 2

 

365bet亚洲真人,实施SQL语句进行多少操作

向数据库表children中插入一行:

 

[cpp] view
plaincopyprint?

 

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include “mysql.h”  
  5.   
  6. int main()  
  7. {  
  8.   MYSQL my_connecyion;  
  9.   int res;  
  10.   
  11.   mysql_init(&my_connecyion);  
  12.   
  13.   if(mysql_real_connect(&my_connecyion,”localhost”,”rick”,”rick”,”foo”,0,NULL,0))  
  14.   {  
  15.     printf(“Connection success\n”);  
  16.   
  17.     //执行SQL语句  
  18.     res = mysql_query(&my_connecyion,”INSERT INTO children(fname,age) VALUES(‘Ann’,3)”);  
  19.   
  20.     if(!res)  
  21.       printf(“Inserted %lu rows\n”,(unsigned long)mysql_affected_rows(&my_connecyion));  
  22.     else  
  23.       fprintf(stderr,”Insert error %d : %s \n”,mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  24.   
  25.     mysql_close(&my_connecyion);  
  26.   }  
  27.   else{  
  28.     fprintf(stderr,”Connection failed\n”);  
  29.     if(mysql_errno(&my_connecyion))  
  30.       fprintf(stderr,”Connection error %d : %s\n”,mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  31.   }  
  32.   
  33.   return EXIT_SUCCESS;  
  34. }  

运作结果:

 

365bet亚洲真人 3

365bet亚洲真人 4

 

在那Ritter别须求小心的是:

函数mysql_affected_rows再次来到的是被二个立异操作修改的行数,并非满足where子句的行数。

奉行SQL语句进行数据操作

向数据库表children中插入一行:

[cpp]view plaincopyprint?

  1. #include<stdlib.h>
  2. #include<stdio.h>
    1. #include”mysql.h”
    1. intmain()
  3. {
  4. MYSQLmy_connecyion;
  5. intres;
    1. mysql_init(&my_connecyion);
    1. if(mysql_real_connect(&my_connecyion,”localhost”,”rick”,”rick”,”foo”,0,NULL,0))
  6. {
  7. printf(“Connectionsuccess\n”);
    1. //执行SQL语句
  8. res=mysql_query(&my_connecyion,”INSERTINTOchildren(fname,age)VALUES”);
    1. if
  9. printf(“Inserted%lurows\n”,(unsignedlong)mysql_affected_rows(&my_connecyion));
  10. else
  11. fprintf(stderr,”Inserterror%d:%s\n”,mysql_errno(&my_connecyion),mysql_error(&my_connecyion));
    1. mysql_close(&my_connecyion);
  12. }
  13. else{
  14. fprintf(stderr,”Connectionfailed\n”);
  15. if(mysql_errno(&my_connecyion))
  16. fprintf(stderr,”Connectionerror%d:%s\n”,mysql_errno(&my_connecyion),mysql_error(&my_connecyion));
  17. }
    1. returnEXIT_SUCCESS;
  18. }

运营结果:

365bet亚洲真人 5

365bet亚洲真人 6

在此间极度要求潜心的是:

函数mysql_affected_rows再次回到的是被三个更新操作修改的行数,并不是满足where子句的行数。

以此函数重临一个偏移值,它代表结果聚集的此时此刻职分。它不是行号,不可能将它用于mysql_data_seek。不过,可将它用于:

【Linux】Ubuntu下C语言访谈MySQL数据库入门,ubuntumysql

采纳的种类是Ubuntu 11.10.数据库是MySQL。

 

 

在MySQL中国建工业总会公司立相应数据库

首先以客商rick登陆MySQL数据库(客商rick已经被root权限客户赋予了创办数据库等等的权能):

365bet亚洲真人 7

接下来创制三个名称为foo的数据库:

[cpp]view plaincopyprint?

  1. CREATEDATABASEfoo;

下一场利用如下SQL语句创造表及插入数据:

[cpp]view plaincopyprint?

  1. CREATETABLEchildren(
  2. childnointNOTNULLauto_increment,
  3. fnamevarchar,
  4. ageint,
  5. PRIMARYKEY
  6. );
    1. INSERTINTOchildren(childno,fname,age)VALUES(1,’Jenny’,21);
  7. INSERTINTOchildren(childno,fname,age)VALUES(2,’Andrew’,17);
  8. INSERTINTOchildren(childno,fname,age)VALUES(3,’Gavin’,8);
  9. INSERTINTOchildren(childno,fname,age)VALUES(4,’Duncan’,6);
  10. INSERTINTOchildren(childno,fname,age)VALUES(5,’Emma’,4);
  11. INSERTINTOchildren(childno,fname,age)VALUES(6,’Alex’,15);
  12. INSERTINTOchildren(childno,fname,age)VALUES(7,’Adrian’,9);

在MySQL命令行格局中实行措施如下:

365bet亚洲真人 8

复制代码 代码如下:

施行SQL语句实行数据操作

向数据库表children中插入一行:

 

[cpp] view plaincopyprint?  

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include “mysql.h”  
  5.   
  6. int main()  
  7. {  
  8.   MYSQL my_connecyion;  
  9.   int res;  
  10.   
  11.   mysql_init(&my_connecyion);  
  12.   
  13.   if(mysql_real_connect(&my_connecyion,”localhost”,”rick”,”rick”,”foo”,0,NULL,0))  
  14.   {  
  15.     printf(“Connection success\n”);  
  16.   
  17.     //执行SQL语句  
  18.     res = mysql_query(&my_connecyion,”INSERT INTO children(fname,age) VALUES(‘Ann’,3)”);  
  19.   
  20.     if(!res)  
  21.       printf(“Inserted %lu rows\n”,(unsigned long)mysql_affected_rows(&my_connecyion));  
  22.     else  
  23.       fprintf(stderr,”Insert error %d : %s \n”,mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  24.   
  25.     mysql_close(&my_connecyion);  
  26.   }  
  27.   else{  
  28.     fprintf(stderr,”Connection failed\n”);  
  29.     if(mysql_errno(&my_connecyion))  
  30.       fprintf(stderr,”Connection error %d : %s\n”,mysql_errno(&my_connecyion),mysql_error(&my_connecyion));  
  31.   }  
  32.   
  33.   return EXIT_SUCCESS;  
  34. }  

运维结果:

 

365bet亚洲真人 9

365bet亚洲真人 10

 

在那Ritter别要求留意的是:

函数mysql_affected_rows重临的是被三个更新操作修改的行数,并不是满意where子句的行数。

使用的系统是Ubuntu 11.10.数据库是MySQL。 MySQL数据库情形计划首先须求设置MySQL客商端和…

在MySQL中国建工业总会公司立相应数据库

第一以客商rick登入MySQL数据库(客商rick已经被root权限客户赋予了成立数据库等等的权力):

365bet亚洲真人 11

然后成立二个名称为foo的数据库:

 

[cpp] view
plaincopyprint?

 

  1. CREATE DATABASE foo;  

然后选用如下SQL语句创设表及插入数据:

 

 

[cpp] view
plaincopyprint?

 

  1. CREATE TABLE children(  
  2.     childno int(11) NOT NULL auto_increment,  
  3.     fname varchar(30),  
  4.     age int(11),  
  5.     PRIMARY KEY (childno)  
  6.     );  
  7.   
  8. INSERT INTO children(childno,fname,age) VALUES(1,’Jenny’,21);  
  9. INSERT INTO children(childno,fname,age) VALUES(2,’Andrew’,17);  
  10. INSERT INTO children(childno,fname,age) VALUES(3,’Gavin’,8);  
  11. INSERT INTO children(childno,fname,age) VALUES(4,’Duncan’,6);  
  12. INSERT INTO children(childno,fname,age) VALUES(5,’Emma’,4);  
  13. INSERT INTO children(childno,fname,age) VALUES(6,’Alex’,15);  
  14. INSERT INTO children(childno,fname,age) VALUES(7,’Adrian’,9);  

在MySQL命令行形式中施行形式如下:

 

365bet亚洲真人 12

 

MySQL数据库境况布置

首先要求安装MySQL客商端和服务器,命令行安装格局为:

[cpp]view plaincopyprint?

  1. sudoapt-getinstallmysql-servermysql-client

接下来,要动用C语言编制程序访谈数据库,必要别的安装二个开采包:

[cpp]view plaincopyprint?

  1. sudoapt-getinstalllibmysqlclient15-dev

365bet亚洲真人 13

复制代码 代码如下:

MySQL数据库情形安插

 

首先须求安装MySQL顾客端和服务器,命令行安装格局为:

 

[cpp] view plaincopyprint?  

  1. sudo apt-get install mysql-server mysql-client  

下一场,要动用C语言编制程序访谈数据库,需求另外安装二个开辟包:

 

 

[cpp] view plaincopyprint?  

  1. sudo apt-get install libmysqlclient15-dev  

365bet亚洲真人 14

 

 

采用的连串是Ubuntu 11.10.数据库是MySQL。

利用的系统是Ubuntu 11.10.数据库是MySQL。

从高校时代开端接触C和UNIX V6时起,Neil马特hew对于UNIX和Linux已经超(Jing Chao)过20年的经验。从那时起他就在IT业专门的工作,主要从事通讯软件的付出,一贯保持对于深奥的编制程序语言和开采技巧的满腔热情。现在,他作为系统设计员,对手艺计谋和QA提出提出。他热心肠于在店堂公司内创立Linux商业案例。业余时间,写作或骑马为乐,Neil努力劝说他的老伴和七个孩子与她一块在乡间散步。Neil参预编辑了Wrox
Press发行的少数本书,最知名的是一路编写了Beginning Linux
Programming和Professional Linux Programming。

在MySQL中国建工业总会公司立相应数据库

首先以客商rick登入MySQL数据库(客商rick已经被root权限客户赋予了创办数据库等等的权能):

365bet亚洲真人 15

接下来创制几个名称叫foo的数据库:

 

[cpp] view plaincopyprint?  

  1. CREATE DATABASE foo;  

接下来利用如下SQL语句创立表及插入数据:

 

 

[cpp] view plaincopyprint?  

  1. CREATE TABLE children(  
  2.     childno int(11) NOT NULL auto_increment,  
  3.     fname varchar(30),  
  4.     age int(11),  
  5.     PRIMARY KEY (childno)  
  6.     );  
  7.   
  8. INSERT INTO children(childno,fname,age) VALUES(1,’Jenny’,21);  
  9. INSERT INTO children(childno,fname,age) VALUES(2,’Andrew’,17);  
  10. INSERT INTO children(childno,fname,age) VALUES(3,’Gavin’,8);  
  11. INSERT INTO children(childno,fname,age) VALUES(4,’Duncan’,6);  
  12. INSERT INTO children(childno,fname,age) VALUES(5,’Emma’,4);  
  13. INSERT INTO children(childno,fname,age) VALUES(6,’Alex’,15);  
  14. INSERT INTO children(childno,fname,age) VALUES(7,’Adrian’,9);  

在MySQL命令行形式中施行措施如下:

 

365bet亚洲真人 16

 

MySQL数据库情形安排

 

第一须要安装MySQL顾客端和服务器,命令行安装格局为:

 

[cpp] view
plaincopyprint?

 

  1. sudo apt-get install mysql-server mysql-client  

下一场,要使用C语言编制程序访谈数据库,要求别的安装叁个开荒包:

 

 

[cpp] view
plaincopyprint?

 

  1. sudo apt-get install libmysqlclient15-dev  

365bet亚洲真人 17

 

 

MySQL数据库连接测量试验

然后选取如下C语言举办数据库连接测验connect1.c:

[cpp]view plaincopyprint?

  1. #include<stdlib.h>
  2. #include<stdio.h>
    1. #include”mysql.h”
    1. intmain(intargc,char*argv[])
  3. {
  4. MYSQL*conn_ptr;
  5. conn_ptr=mysql_init;
    1. if(!conn_ptr)
  6. {
  7. fprintf(stderr,”mysql_initfailed\n”);
  8. returnEXIT_FAILURE;
  9. }
    1. conn_ptr=mysql_real_connect(conn_ptr,”localhost”,”rick”,”rick”,”foo”,0,NULL,0);
    1. if
  10. printf(“Connectionsuccess\n”);
  11. else
  12. printf(“Connectionfailed\n”);
    1. mysql_close;
    1. returnEXIT_SUCCESS;
  13. }

施行结果:

365bet亚洲真人 18

留心的是:要求钦定include库和库文件的路线名,以及钦定链接的库模块mysqlclient。

假若不在初叶的时候安装开采包,就能够时有发生如下错误:

365bet亚洲真人 19

复制代码 代码如下:

MySQL数据库连接测量检验

 

接下来利用如下C语言实行数据库连接测量试验connect1.c:

 

[cpp] view
plaincopyprint?

 

  1. #include <stdlib.h>  
  2. #include <stdio.h>  
  3.   
  4. #include “mysql.h”  
  5.   
  6. int main(int argc,char *argv[])  
  7. {  
  8.   MYSQL *conn_ptr;  
  9.   conn_ptr = mysql_init(NULL);  
  10.   
  11.   if(!conn_ptr)  
  12.   {  
  13.     fprintf(stderr,”mysql_init failed\n”);  
  14.     return EXIT_FAILURE;  
  15.   }  
  16.   
  17.   conn_ptr = mysql_real_connect(conn_ptr,”localhost”,”rick”,”rick”,”foo”,0,NULL,0);  
  18.   
  19.   if(conn_ptr)  
  20.     printf(“Connection success\n”);  
  21.   else  
  22.     printf(“Connection failed\n”);  
  23.   
  24.   mysql_close(conn_ptr);  
  25.   
  26.   return EXIT_SUCCESS;  
  27. }  

实行结果:

 

365bet亚洲真人 20

留神的是:要求钦命include库和库文件的路线名,以及钦命链接的库模块mysqlclient。

设若不在开首的时候安装开采包,就能够爆发如下错误:

365bet亚洲真人 21

 

void mysql_data_seek(MYSQL_RES *result, my_ulonglong offset);

大概关于这一函数的最显然的事正是其特殊的回到结果。由于可移植性原因,那是一个独特的无符号类型。为了在printf中行使,提议将其强制调换来使用%lu格式标准的无符号长整数。那几个函数重临受此前的UPDATE、INSERT或DELETE查询影响的行数,那个查询是行使mysql_query执行的。
一般性对于mysql_函数,重回码0表示一直不行受影响;正数表示其实结果,经常是受影响的行数。
如前所述,当使用mysql_affected_rows时恐怕出现未期望的结果。让大家先研究受INSERT语句影响的行数,它将按预期进展操作。将下列代码加多到程序
connect2.c 中,何况称其为insert1.c:

正如预期,插入的行数为1。
近年来,大家改变代码,所以 ‘insert’ 部分被替换来:

要按必要逐行检索数据,并不是立刻收获全体数额并将它存款和储蓄在顾客机中,可以将mysql_store_result调用替换到mysql_use_result:

它从mysql_store_result获得再次回到的结果结构,何况在该结果集中重回行数,行数也许为0。假若mysql_store_result成功,则mysql_num_rows也再而三成功的。
这种mysql_store_result和mysql_num_rows的结合是寻觅数据的一种方便人民群众况且直接的不二秘诀。一旦mysql_store_result成功重临,则具备查询数据都早就积累在顾客机上并且我们知道能够从结果结构中查找它,而不用忧郁会生出数据库或互连网错误,因为对此程序有所数据都以地面包车型地铁。还是能立时开采重返的行数,它能够使编码更简便易行。如前所述,它将享有结果及时地发送回看客机。对于大结果集,它大概损耗大批量的服务器、互连网和顾客机能源。由于那一个原因,使用更加大的数目集时,最棒仅检索须要的数目。不久,大家将钻探什么利用mysql_use_result函数来产生该操作。
一旦检索了多少,则足以运用mysql_fetch_row来搜索它,何况动用mysql_data_seek、mysql_row_seek、mysql_row_tell操作结果集。在最早找出数据阶段此前,让我们先讨论一下这一个函数。

mysql_close(&my_connection);

有关我

这段日子,大家早已有了三个接连,何况知道怎么管理错误,是时候研商使用大家的数据库来作一些实际工作了。试行全部项目标SQL的主关键字是mysql_query:

res = mysql_query(&my_connection, “SELECT childno, fname,
age FROM children WHERE age > 5″);
if (res) {
printf(“SELECT error: %s\n”, mysql_error(&my_connection));
} else {
res_ptr = mysql_store_result(&my_connection);
if (res_ptr) {
printf(“Retrieved
%luows\n”,(unsignedlong)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: s\n”,mysql_error(&my_connection));
}
}
mysql_free_result(res_ptr);
}

MYSQL_RES *mysql_use_result(MYSQL *connection);

复制代码 代码如下:

执行SQL语句

发表评论

电子邮件地址不会被公开。 必填项已用*标注