当前位置: 首页 > 图文教程 > 数据库 > MYSQL > 在 MySQL 数据库中使用C 执行SQL的语句

MYSQL
MySQL忘记密码恢复密码的实现方法
mysql 时间转换函数的使用方法
使用mysql的disctinct group by查询不重复记录
mysql备份恢复mysqldump.exe几个常用用例
超详细mysql left join,right join,inner join用法分析
mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下载
比较详细的MySQL字段类型说明
mysql 记录不存在时插入 记录存在则更新的实现方法
MYSQL基础之连接MYSQL、修改密码、添加用户
mysql数据库优化必会的几个参数中文解释
mysql中文排序注意事项与实现方法
MySQL 5.0触发器参考教程
MySQL5创建存储过程的示例
MYSQL5 masterslave数据同步配置方法
mysql数据库导出xml的实现方法
MySql增加用户、授权、修改密码等语句
Mysql默认设置的危险性分析
用MySQL创建数据库和数据库表代码
Mysql如何避免全表扫描的方法
mysql的校对规则引起的问题分析

MYSQL 中的 在 MySQL 数据库中使用C 执行SQL的语句


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 81 ::
收藏到网摘: n/a

与 PostgreSQL 相似,可使用许多不同的语言来访问 MySQL,包括 C、C++、Java 和 Perl。从 Professional Linux Programming 中第 5 章有关 MySQL 的下列章节中,Neil Matthew 和 Richard Stones 使用详尽的 MySQL C 接口向我们介绍了如何在 MySQL 数据库中执行 SQL 语句。他们将看看返回数据的语句,例如 INSERT 以及不返回数据的语句,例如 UPDATE 和 DELETE。然后,他们将编写从数据库检索数据的简单程序。

执行 SQL 语句
现在,我们已经有了一个连接,并且知道如何处理错误,是时候讨论使用我们的数据库来作一些实际工作了。执行所有类型的 SQL 的主关键字是

正如您所见,它非常简单。它取一个指向连接结构的指针和包含要执行的 SQL 的文本字符串;与命令行工具不同,将不使用结束分号。成功之后,返回 0。在需要包含二进制数据的特殊情况下,可以使用相关的函数,mysql_real_query。虽然出于本章的目的,我们仅需要讨论 mysql_query。

不返回数据的 SQL 语句

我们将先讨论 UPDATE、DELETE 和 INSERT 语句。因为它们不返回数据,所以更易于使用。 

这里我们将介绍的另一个重要函数是检查受影响的行数的函数:  

以下为引用的内容:

  my_ulonglong mysql_affected_rows(MYSQL *connection);

可能关于这一函数的最显而易见的事就是其非同寻常的返回结果。由于可移植性原因,这是一个特殊的无符号类型。为了在 printf 中使用,建议将其强制转换成使用 %lu 格式规范的无符号长整数。这个函数返回受以前的 UPDATE、INSERT 或 DELETE 查询影响的行数,这些查询是使用 mysql_query 执行的。

通常对于 mysql_ 函数,返回码 0 表示没有行受影响;正数表示实际结果,通常是受影响的行数。  

如前所述,当使用 mysql_affected_rows 时可能出现未期望的结果。让我们先讨论受 INSERT 语句影响的行数,它将按预期进行操作。将下列代码添加到程序 connect2.c 中,并且称其为 insert1.c: 

以下为引用的内容:

  #include
     #include
  
     #include "mysql.h"
  
     int main(int argc, char *argv[]) {
      MYSQL my_connection;
  
      int res;
  
      mysql_init(&my_connection);
      if (mysql_real_connect(&my_connection, "localhost",
                 
                  "rick", "bar", "rick", 0, NULL, 0)) {
        printf("Connection success\n");
  
        res = mysql_query(&my_connection, "INSERT INTO children(fname,age)
                             
                                VALUES('Ann',3)");
        if (!res) {
        
         printf("Inserted %lu rows\n",
             (unsigned long)mysql_affected_rows(&my_connection));
        } else {
        
       fprintf(stderr, "Insert error %d: s\n",mysql_errno(&my_connection),             
                          mysql_error(&my_connection));
        }
  
        mysql_close(&my_connection);
      } else {
       
       fprintf(stderr, "Connection failed\n");
        if (mysql_errno(&my_connection)) {
        fprintf(stderr, "Connection error %d: %s\n",
          mysql_errno(&my_connection),mysql_error(&my_connection));
        }
      }
  
      return EXIT_SUCCESS;
    }

正如预期,插入的行数为 1。
  
现在,我们更改代码,所以 'insert' 部分被替换成:

以下为引用的内容:

  mysql_errno(&my_connection), mysql_error(&my_connection));
      }
     }
  
     res = mysql_query(&my_connection, "UPDATE children SET AGE = 4
    
  WHERE fname = 'Ann'");
  
     if (!res) {
      printf("Updated %lu rows\n",
              
  (unsigned long)mysql_affected_rows(&my_connection));
     } else {
     
  fprintf(stderr, "Update error %d: %s\n",
  mysql_errno(&my_connection),