关于教程
这是一篇 MySQL 数据库的 C 语言开发教程。它讲述了用 C 语言开发 MySQL 应用程序的基本过程。
关于 MySQL 数据库
MySQL 是一个重要的开放源代码的、多用户的、多线程的数据库管理系统。MySQL 在 Web 应用中很流行。它是非常流行的 LAMP(Linux, Apache, MySQL, PHP) 架构的一部分。MySQL 被瑞典一家名为 MySQL AB 并对开源事业有杰出贡献的公司所有。MySQL 数据库可以运行在很多的操作系统上,如 BSD, Unix, Linux Windows 和 Mac。维基百科和 Youtube 都在使用 MySQL。这些站点一天有数百万将的查询。MySQL 有两个版本,分别是 MySQL 服务器系统和 MySQL 嵌入式系统。
第一个实例
我们第一个实例将要测试调用一个 MySQL 函数。
#include <my_global.h>
#include <mysql.h>
int main(int argc, char * argv[])
{
printf("MySQL client version: %s\n", mysql_get_client_info());
return 0;
}
函数 mysql_get_client_info()返回 MySQL 客户端版本信息。
gcc version.c -o version `mysql_config --cflags --libs`
./version
这是是如何编译和运行这个实例。
MySQL client version: 5.0.38
#include <my_global.h>
#include <mysql.h>
我们包含两个需要的头文件: mysql.h MySQL 函数调用的最重要的头文件。my_global.h 包含了一些全局的声明和标准输入/输出头文件。
printf("MySQL client version: %s\n", mysql_get_client_info());
这行代码输入了 MySQL 客户端的版本信息。我们调用了 mysql_get_client_info()函数。
创建一个数据库
在第二个实例中创建一个数据库。
#include <my_global.h>
#include <mysql.h>
int main(int argc, char * argv[])
{
MYSQL * conn;
conn = mysql_init(NULL);
if (conn == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
if (mysql_real_connect(conn, "localhost", "username", "password", NULL, 0, NULL, 0) == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
if (mysql_query(conn, "CREATE DATABASE testdb")) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
mysql_close(conn);
return 0;
}
这段代码连接了 MySQL 数据库系统并创建了一个名为 testdb 的数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| testdb |
+--------------------+
3 rows in set (0.00 sec)
检验的确创建了一个新的库。
在这段实例中我们包含了错误检测,检查可能出现的错误是非常重要的。在数据库开发领域里,很多地方都可能出错。为了有清晰的代码之后的实例中将不包含错误检查,我们假设所有人清楚错误检测是开发人员的责任。
实例分为如下的部分:
- 初始化一个连接对象结构
- 创建一个连接
- 执行一个查询
- 关闭连接
MYSQL * conn;
我们声明一个 MYSQL 结构指针,这个结构是连接对象。
conn = mysql_init(NULL);
mysql_init() 函数返回一个连接对象。
if (conn == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
我们检查返回值,如果 mysql_init() 调用失败打印错误消息并中止应用程序。
if (mysql_real_connect(conn, "localhost", "username", "password", NULL, 0, NULL, 0) == NULL) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
mysql_real_connect() 函数建立了一个到数据库的连接。我们提供连接对象、主机名、用户名和密码参数。其它四个参数分别是数据库名、端口、Unix 套接字和客户端标记。
if (mysql_query(conn, "CREATE DATABASE testdb")) {
printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn));
exit(1);
}
mysql_query() 执行一个 SQL 语句。这里创建一个新的库。
mysql_close(conn);
最后,我们关闭数据库连接。
创建和操作表
第三个实例将要创建一个表并插入一些数据。
#include <my_global.h>
#include <mysql.h>
int main(int argc, char * argv[])
{
MYSQL * conn;
conn = mysql_init(NULL);
mysql_real_connect(conn, "localhsot", "username", "password", "testdb", 0, NULL, 0);
mysql_query(conn, "CREATE TABLE writers(name VARCHAR(25))");
mysql_query(conn, "INSERT INTO writers VALUES('Leo Tolstoy')");
mysql_query(conn, "INSERT INTO writers VALUES('Jack London')");
mysql_query(conn, "INSERT INTO writers VALUES('Honore de Balzac')");
mysql_query(conn, "INSERT INTO writers VALUES('Lion Feuchtwanger')");
mysql_query(conn, "INSERT INTO writers VALUES('Emile Zole')");
mysql_close(conn);
return 0;
}
我们不使用任何新的 MySQL 函数。使用 mysql_query() 函数去创建表和插入数据。
mysql_real_connect(conn, "localhost", "username", "password", "testdb", 0, NULL, 0);
我们连接数据库 testdb,用户名 username 密码 password。
mysql_query(conn, "CREATE TABLE writers(name VARCHAR(25))");
这里我们创建一个名为 writers 的表,它有一个 varchar 类型的字段。
mysql_query(conn, "INSERT INTO writers VALUES('Leo Tolstoy')");
我们在 writers 表里插入一个记录。
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| writers |
+------------------+
1 row in set (0.00 sec)
显示数据库里的表。
mysql> select * from writers;
+-------------------+
| name |
+-------------------+
| Leo Tolstoy |
| Jack London |
| Honore de Balzac |
| Lion Feuchtwanger |
| Emile Zola |
+-------------------+
5 rows in set (0.00 sec)
枚举表中的记录。
Over!