MySQL数据库:使用mysql(Ubuntu)

作者: 虞锦雯 | 来源:发表于2017-06-14 13:43 被阅读142次
    一、MySQL安装
    (一)安装mysql服务端
    sudo apt-get install mysql-server
    
    (二)安装图形开发界面
    sudo apt-get install mysql-workbench
    
    (三)安装mysql开发包
    sudo apt-get install libmysqlclient-dev
    
    二、API
    (一)MYSQL

    该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。

    (二)MYSQL_RES

    该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE,EXPLAIN)。

    (三)MYSQL_ROW

    这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据,不能将其当作由Null终结的字符串对待,这是因为这类值可能会包含Null字节)。行是通过调用mysql_fetch_row()获得的。

    (四)MYSQL_FIELD

    该结构包含关于字段的信息,如字段名、类型和大小。通过重复调用mysql_fetch_field(),可为每个字段获得MYSQL_FIELD结构。字段值不是该结构的组成部份,它们包含在MYSQL_ROW结构中。

    (五)MYSQL_FIELD_OFFSET

    这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号,从0开始。

    三、mysql常用API
    (一)mysql_init()
    • 语法:
    MYSQL *mysql_init(MYSQL *mysql)
    
    • 描述:
      分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。
    • 返回值:
      初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。
    (二)mysql_real_connect()
    • 语法:
    MYSQL *mysql_real_connect(
    MYSQL *mysql, 
    const char *host, 
    const char *user, 
    const char *passwd, 
    const char *db, 
    unsigned int port, 
    const char *unix_socket, 
    unsigned long client_flag
    )
    
    • 描述:
      mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。关闭连接。
      如果“port”不是0,其值将用作TCP/IP连接的端口号。
      如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。
      注意:“host”参数决定了连接的类型。client_flag的值通常为0。
    • 返回值:
      如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。
    (三)mysql_real_query()
    • 语法:
    int mysql_real_query(
    MYSQL *mysql, 
    const char *query, 
    unsigned long length
    )
    
    • 描述:
      执行由“query”指向的SQL查询,它应是字符串长度字节“long”。
      正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含由分号隔开的多条语句。对于包含二进制数据的查询,必须使用mysql_real_query()而不是mysql_query()。
    • 返回值:
      如果查询成功,返回0。如果出现错误,返回非0值。
    (四)mysql_store_result()
    • 语法:
    MYSQL_RES *mysql_store_result(MYSQL *mysql)
    
    • 描述:
      对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()或mysql_use_result() 。mysql_store_result()将查询的全部结果读取到客户端,分配1个MYSQL_RES结构,并将结果置于该结构中。调用mysql_num_rows()可以找出结果集中的行数。可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()和mysql_row_tell()来获取或设置结果集中的当前行位置。
    • 返回值:
      具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。
    (五)mysql_use_result()
    • 语法:
    MYSQL_RES *mysql_use_result(MYSQL *mysql)
    
    • 描述:
      mysql_use_result()将初始化结果集检索,但并不像mysql_store_result()那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用,对每一行分别进行检索。这将直接从服务器读取结果,而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比,速度更快而且使用的内存也更少。使用mysql_use_result()时,必须执行mysql_fetch_row(),直至返回NULL值。
    • 返回值:
      具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。
    (六)mysql_fetch_row()
    • 语法:
    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
    
    • 描述:
      检索结果集的下一行。如果行中保存了调用mysql_fetch_row()返回的值,将按照row[0]到row[mysql_num_fields(result)-1],访问这些值的指针。
    • 返回值:
      下一行的MYSQL_ROW结构。如果没有更多要检索的行或出现了错误,返回NULL。
    (七)mysql_free_result()
    • 语法:
    void mysql_free_result(MYSQL_RES *result)
    
    • 描述:
      释放由mysql_store_result()、mysql_use_result()、mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。
    • 返回值:
      无 。
    (八)mysql_error()
    • 语法:
    const char *mysql_error(MYSQL *mysql)
    
    • 描述:
      对于由mysql指定的连接,对于失败的最近调用的API函数,mysql_error()返回包含错误消息的、由Null终结的字符串
      如果成功,,所有向服务器请求信息的函数均会复位mysql_error()。
    • 返回值:
      返回描述错误的、由Null终结的字符串。如果未出现错误,返回空
      字符串。
    (九)mysql_close()
    • 语法:
    void mysql_close(MYSQL *mysql)
    
    • 描述:
      关闭前面打开的连接。如果句柄是由mysql_init()或mysql_connect()自动分配的,mysql_close()还将解除分配由mysql指向的连接句柄。
    • 返回值:
      无 。
    四、一个简单的C++程序
    #include <mysql/mysql.h>
    #include <iostream>
    using namespace std;
    MYSQL *conn;MYSQL_RES *res;MYSQL_ROW row;
    int main(int argc,char **argv)
    {
        const char *sever = "localhost"; //主机
        const char *user = "root"; //用户名
        const char *password = "XXXXXX"; //用户密码
        const char *database = "database_name"; //数据库名称
        conn = mysql_init(NULL);
        if(!mysql_real_connect(conn,sever,user,password,database,0,NULL,0))
        {
            cout << "connect error" << endl;
            return 0;
        }
        mysql_set_character_set(conn,"utf8");
        if(mysql_query(conn,"select * from emp"))
        {
            cout << "query error" << endl;
            return 0;
        }
        //res = mysql_store_result(conn);
        res = mysql_use_result(conn);
        while((row = mysql_fetch_row(res)) != NULL)
        {
            cout << row[0] << '\t' << row[1] << '\t' << row[2] << '\t' 
                 << row[3] << '\t' << row[4] << endl;
        }
        mysql_free_result(res);
        mysql_close(conn);
        return 0;
    }
    

    显示结果:


    显示结果.png

    相关文章

      网友评论

        本文标题:MySQL数据库:使用mysql(Ubuntu)

        本文链接:https://www.haomeiwen.com/subject/nqhdqxtx.html