mysql怎么使⽤sql语句_在MySQL数据库中使⽤C执⾏SQL语
句(1)
与PostgreSQL相似,可使⽤许多不同的语⾔来访问MySQL,包括C、C++、Java和Perl。从Professional Linux Programming中第5章有关MySQL的下列章节中,Neil Matthew和Richard Stones使⽤详尽的MySQL C接⼝向我们介绍了如何在MySQL数据库中执⾏SQL 语句。他们将讨论返回数据的语句,例如INSERT以及不返回数据的语句,例如UPDATE和DELETE。然后,他们将编写从数据库检索数据的简单程序。
执⾏SQL语句
现在,我们已经有了⼀个连接,并且知道如何处理错误,是时候讨论使⽤我们的数据库来作⼀些实际⼯作了。执⾏所有类型的SQL的主关键字是mysql_query:int mysql_query(MYSQL *connection, const char *query)
正如您所见,它⾮常简单。它取⼀个指向连接结构的指针和包含要执⾏的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),
mysql_error(&my_connection));
}
现在假设⼦表中有的数据,如下:
childno
fname age
1
2
3
4
5
6
7
8
9
10
11 Jenny Andrew Gavin Duncan Emma Alex Adrian Ann Ann Ann Ann
14
10
4
2
11
5
3
4
3简单的mysql语句

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。