zoukankan      html  css  js  c++  java
  • 使用c语言访问mysql数据库

    首先在linux上安装mysql

     1 jason@t61:~$ mysql -u root
     2 Welcome to the MySQL monitor.  Commands end with ; or g.
     3 Your MySQL connection id is 9
     4 Server version: 5.6.24-0ubuntu2 (Ubuntu)
     5 
     6 Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
     7 
     8 Oracle is a registered trademark of Oracle Corporation and/or its
     9 affiliates. Other names may be trademarks of their respective
    10 owners.
    11 
    12 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    13 
    14 mysql> create database foo;
    15 Query OK, 1 row affected (0.00 sec)
    16 
    17 mysql> use foo ;
    18 Database changed
    19 mysql> exit
    20 Bye

    上面的代码是进入mysql创建数据库foo供测试

     1 -这是create_children.sql的源码
     2 create table children(
     3     childno int(11) not null auto_increment,
     4     fname varchar(30),
     5     age int(11),
     6     primary key (childno));
     7     
     8 INSERT INTO children VALUES (1,'Jenny',17);
     9 INSERT INTO children VALUES (2,'Andrew',13);
    10 INSERT INTO children VALUES (3,'Gavin',4);
    11 INSERT INTO children VALUES (4,'Duncan',2);
    12 INSERT INTO children VALUES (5,'Emma',0);
    13 INSERT INTO children VALUES (6,'Alex',11);
    14 INSERT INTO children VALUES (7,'Adrian',5);

    在mysql中调用执行这段源码

     1 mysql> source /home/jason/c_program/544977-blp3e/chapter08/create_children.sql
     2 Query OK, 0 rows affected (0.48 sec)
     3 
     4 Query OK, 1 row affected (0.08 sec)
     5 
     6 Query OK, 1 row affected (0.03 sec)
     7 
     8 Query OK, 1 row affected (0.12 sec)
     9 
    10 Query OK, 1 row affected (0.11 sec)
    11 
    12 Query OK, 1 row affected (0.05 sec)
    13 
    14 Query OK, 1 row affected (0.06 sec)
    15 
    16 Query OK, 1 row affected (0.05 sec)
    17 
    18 mysql> show tables;
    19 +---------------+
    20 | Tables_in_foo |
    21 +---------------+
    22 | children      |
    23 +---------------+
    24 1 row in set (0.00 sec)

    执行之后查看执行的效果:

     1 mysql> select * from  children;
     2 +---------+--------+------+
     3 | childno | fname  | age  |
     4 +---------+--------+------+
     5 |       1 | Jenny  |   17 |
     6 |       2 | Andrew |   13 |
     7 |       3 | Gavin  |    4 |
     8 |       4 | Duncan |    2 |
     9 |       5 | Emma   |    0 |
    10 |       6 | Alex   |   11 |
    11 |       7 | Adrian |    5 |
    12 +---------+--------+------+
    13 7 rows in set (0.00 sec)

    这样就完成数据库的准备工作

     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 
    10    conn_ptr = mysql_init(NULL);
    11    if (!conn_ptr) {
    12       fprintf(stderr, "mysql_init failed
    ");
    13       return EXIT_FAILURE;
    14    }
    15    
    16    conn_ptr = mysql_real_connect(conn_ptr, "localhost", "root", "","foo", 0, NULL, 0);
    17 
    18    if (conn_ptr) {
    19       printf("Connection success
    ");
    20    } else {
    21       printf("Connection failed
    ");
    22    }
    23 
    24    mysql_close(conn_ptr);
    25 
    26    return EXIT_SUCCESS;
    27 }

    上面是初始化链接和建立链接的函数的使用

     1 jason@t61:~/c_program/544977-blp3e/chapter08$ gcc -I/usr/include/mysql connect1.c -L/usr/lib/mysql -lmysqlclient -o connect1
     2 connect1.c:4:19: fatal error: mysql.h: 没有那个文件或目录
     3  #include "mysql.h"
     4                    ^
     5 compilation terminated.
     6 //缺少头文件
     7 jason@t61:~/c_program/544977-blp3e/chapter08$ sudo apt-get install mysql-devel
     8 [sudo] password for jason: 
     9 正在读取软件包列表... 完成
    10 正在分析软件包的依赖关系树       
    11 正在读取状态信息... 完成  
    12 E: 未发现软件包 mysql-devel
    13 //不匹配uubuntu情况
    14 jason@t61:/$ sudo apt-get install libmysqlclient-dev
    15 正在读取软件包列表... 完成
    16 正在分析软件包的依赖关系树       
    17 正在读取状态信息... 完成       
    18 下列【新】软件包将被安装:
    19   libmysqlclient-dev
    20 //成功

    下面是编译这个代码:

    1 jason@t61:~/c_program/544977-blp3e/chapter08$ gcc -I/usr/include/mysql connect1.c -L/usr/lib/mysql -lmysqlclient -o connect1
    2 jason@t61:~/c_program/544977-blp3e/chapter08$ ./connect1
    3 Connection failed

    这个失败是因为原来的.c文件中的权限设置给的不合适

     1 mysql> select user, host, password from mysql.user;
     2 +------------------+-----------+-------------------------------------------+
     3 | user             | host      | password                                  |
     4 +------------------+-----------+-------------------------------------------+
     5 | root             | localhost |                                           |
     6 | root             | t61       |                                           |
     7 | root             | 127.0.0.1 |                                           |
     8 | root             | ::1       |                                           |
     9 | debian-sys-maint | localhost | *16AEF7D29C488DB8597DCBF25DCE8097E57558B7 |
    10 +------------------+-----------+-------------------------------------------+
    11 5 rows in set (0.00 sec)

    修改相应的账号或者密码:

    1 jason@t61:~/c_program/544977-blp3e/chapter08$ gcc -I/usr/include/mysql connect1.c -L/usr/lib/mysql -lmysqlclient -o connect1
    2 jason@t61:~/c_program/544977-blp3e/chapter08$ ./connect1 
    3 Connection success
    4 jason@t61:~/c_program/544977-blp3e/chapter08$
     1 #include <stdlib.h>
     2 #include <stdio.h>
     3 
     4 #include "mysql.h"
     5 
     6 int main(int argc, char *argv[]) {
     7    MYSQL my_connection;
     8 
     9    mysql_init(&my_connection);  
    10    if (mysql_real_connect(&my_connection, "localhost", "root", "", "foo", 0, NULL, 0)) {
    11       printf("Connection success
    ");
    12       mysql_close(&my_connection);
    13    } else {
    14       fprintf(stderr, "Connection failed
    ");
    15       if (mysql_errno(&my_connection)) {
    16           fprintf(stderr, "Connection error %d: %s
    ", mysql_errno(&my_connection), mysql_error(&my_connection));
    17       }
    18    }
    19 
    20    return EXIT_SUCCESS;
    21 }

    这段代码有错误处理的能力可以把相应的错误信息打印出来:

    1 //首先给错误的账号密码
    2 jason@t61:~/c_program/544977-blp3e/chapter08$ gcc -I/usr/include/mysql connect2.c -L/usr/lib/mysql -lmysqlclient -o connect2
    3 jason@t61:~/c_program/544977-blp3e/chapter08$ ./connect2
    4 Connection failed
    5 Connection error 1045: Access denied for user 'rick'@'localhost' (using password: YES)
    6 jason@t61:~/c_program/544977-blp3e/chapter08$ gcc -I/usr/include/mysql connect2.c -L/usr/lib/mysql -lmysqlclient -o connect2
    7 jason@t61:~/c_program/544977-blp3e/chapter08$ ./connect2
    8 Connection success

    //2015年06月28日 星期日 14时54分19秒


    万事走心 精益求美


  • 相关阅读:
    VSFTPD匿名用户上传文件
    shell随机数比较
    Verse For Santa ---- CodeForces
    计算机基础--整数加减运算
    Hello,Blog!
    题解 P2486 【[SDOI2011]染色】
    题解 P1047 【校门外的树】
    题解 P1339 【[USACO09OCT]热浪Heat Wave】——线段树做法
    题解 P1197 【[JSOI2008]星球大战】
    题解 P1886 【滑动窗口】
  • 原文地址:https://www.cnblogs.com/kongchung/p/4605552.html
Copyright © 2011-2022 走看看