zoukankan      html  css  js  c++  java
  • Linux C/C++ 操作MySQL

    一、常用的基本操作

    1.        登录:mysql -h localhost -u root -p

    -h:后面接的是主机名,表示你要连接到哪台主机的MySQL数据库。localhost(127.0.0.1)也可以是SV 连接的主机IP.

    -u:后面接的是用户名,MySQL默认的就是root。

    -p:指定需要使用密码登陆MySQL数据库,如果密码为空,该参数可以省略。登陆密码也可以直接输在-p后。

    2.       查看数据库:show databases;

    3.        创建数据库:create database 数据库名。

    4.        进入数据库:Use 数据库名;

    5.       创建表:create table myclass(表结构)

    6.       查看表:describe 表名;

    7.       插入数据:insert into myclass values("1230011","张三","20","1","山西");

    8.       查看表中所有信息:select * from myclass

    9.        查询表中某一列的数据或者某几列的数据:命令:select id,name from myclass;

    10.     查询特定条件的数据:select * from myclass where id="1230011";

    11.     修改数据表中的数据:update myclass set name="张大仙" where id='1230011';

    12.     删除数据表中的数据: delete from myclass where name='张大仙';

    13.     删除数据表中的某一列:alter table myclass drop age

    14.     修改列名:alter table myclass change name students_name char(20) not null;

    15.     数据表中插入列:alter table myclass add age char(10) not null ;

    16.    删除表table1:drop table if exists table1;

    17.    备份数据库testdb:mysqldump -h 192.168.3.143 -u root -p pwd -x --default-character-set=gbk >C: estdb.sql

    18.    删除数据库testdb:drop database testdb;

    19.    恢复testdb数据库:mysql -u root -pleizhimin testdb <C: estdb.sql

    二、常用类型介绍

    1. MYSQL

    用于定义一个mysql对象,便于后续操作确定要操作的数据库是哪一个。

    MYSQL mysql;  //mysql标记对应某个数据库1

    2. MYSQL_ROW

    用于定义一个行对象,其内容含有一行的数据。

    MYSQL_ROW row;  //row[i]可用于输出该行第i个字段的数据1

    3. MYSQL_FIELD

    用于定义一个存储字段信息的对象。

    MYSQL_FIELD *field;  //field->name存储对应字段名称

    4. MYSQL_RES

    用于定义一个存储数据库检索信息结果的对象。

    MYSQL_RES *result;

    三、常用函数介绍

    其实在操作mysql数据库时,最常使用的函数有以下几个:

    1. MYSQL * mysql_init()

    用于初始化一个MYSQL对象,来连接mysql服务端。

    MYSQL *mysql_init( MYSQL *mysql ); //成功返回MySQL结构指针,失败返回NULL

    //example

    MYSQL mysql;

    mysql_init( &mysql );12345

    2. mysql_real_connect()

    用于连接数据库

    MYSQL *mysql_real_connect (

        MYSQL *mysql,   //初始化的MYSQL对象,与mysql_init()对应

        const char *host,   //主机地址

        const char *user,   //用户,例如:root

        const char *passwd,   //数据库的密码

        const char *db,   //要连接的数据库,例如:student

        unsigned int port,   //端口,可填0

        const char *unix_socket,   //一般为NULL

    unsigned long client_flag);  //一般为0

    //成功返回MySQL结构指针,失败返回NULL

    //example

    mysql_real_connect( &mysql, "localhost", "root",

                        "mypasswd", "student", 0, NULL, 0 );12345678910111213

    3. mysql_query()

    用于执行mysql命令。其参数应使用c风格字符串。

    int  mysql_query( MYSQL *mysql, char * command );//成功返回0

    //example

    string command = "select * from info";

    mysql_query( &mysql, command.c_str() );12345

    4. mysql_store_result()

    用于获取mysql操作的检索结果。

    //成功返回MYSQL_RES指針,失敗返回NULL

    MYSQL_RES *mysql_store_result(MYSQL *mysql);

    //example

    MYSQL_RES *result;

    result = mysql_store_result( &mysql );12345

    5. mysql_num_rows()

    用于获取结果集的行数。

    mysql_num_rows( MYSQL_RES *result );1

    6. mysql_num_fields()

    用于获取结果集的字段数。

    mysql_num_fields( MYSQL_RES *result );

    //example

    int row_num;

    row_num = mysq l_num_fields( result );12345

    7. mysql_fetch_field()

    用于获取下一个字段的类型。

    MYSQL_FIELD* mysql_fetch_field(MYSQL_RES *result);1

    8. mysql_fetch_row()

    从结果集中获取下一行,结束返回NULL。

    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

    //example

    MYSQL_ROW row;

    while( row = mysql_fetch_row( result ), row != NULL ) {

        for( int i = 0; i < num; i++ ) {

            cout << row[i] << " ";

        }

        cout << endl;

    }12345678910

    9. mysql_fetch_field_direct()

    给定字段序号,返回字段类型,结束返回NULL。

    MYSQL_FIELD* mysql_fetch_field_direct(MYSQL_RES *result, int i);

    //example

    int num = mysql_num_fields( result );  //返回字段个数

    for( int i = 0; i < num; i++ ) {

        field = mysql_fetch_field_direct( result, i );  //返回字段类型

        cout << field->name << " ";  //输出字段名

    }

    10. mysql_close()

    用于关闭连接。

    mysql_close( MYSQL *mysql );

    示例:

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <iostream>
      4 #include <string>
      5 #include "mysql.h"
      6 using namespace std;
      7 
      8 class MysqlDB 
      9 {
     10 private:
     11     MYSQL mysql;
     12     MYSQL_ROW row;
     13     MYSQL_RES *result;
     14     MYSQL_FIELD *field;
     15 public:
     16     MysqlDB() 
     17     {
     18         if( mysql_init( &mysql ) == NULL ) 
     19         {
     20             cout << "init error, line: " << __LINE__ << endl;
     21             exit(-1);
     22         }
     23     }
     24     ~MysqlDB() 
     25     {
     26         mysql_close( &mysql );
     27     }
     28     void connect( string host, string user, string passwd,  string database ) 
     29     {
     30         //成功返回MYSQL指向的指针,失败返回NULL
     31         if( !mysql_real_connect( &mysql, host.c_str(), user.c_str(), passwd.c_str(), database.c_str(), 0, NULL, 0 ) )
     32         {
     33             cout << "connect error, line: " << __LINE__ << endl;
     34             exit(-1);
     35         }
     36     }
     37     void add();
     38     void del();
     39     void update();
     40     void print();
     41 };
     42 
     43 void MysqlDB::add()
     44 {
     45     string id, name, sex, birthday;
     46     do 
     47     {
     48         cout << "请输入学生信息:
    ";
     49         cin >> id >> name >> sex >> birthday;
     50         string sql = "insert into stu values('" + id + "', '" + name + "', '" + sex + "', '" + birthday + "');";
     51         cout << sql << endl;
     52         mysql_query( &mysql, sql.c_str() );
     53         cout << "是否继续(y/n): ";
     54         cin >> id;
     55     } while( id == "y" );
     56 }
     57 
     58 void MysqlDB::del()
     59 {
     60     string id;
     61     do
     62     {
     63         cout << "请输入删除学生信息的ID:
    ";
     64         cin >> id;
     65         string sql = "delete from stu where id='" + id +"';";
     66         cout << sql << endl;
     67         mysql_query( &mysql, sql.c_str() );
     68         cout << "是否继续(y/n): ";
     69         cin >> id;
     70     } while( id == "y" );
     71 }
     72 
     73 void MysqlDB::update()
     74 {
     75     string id, filed,value;
     76     do 
     77     {
     78         cout << "请输入修改学生信息ID,字段,值:
    ";
     79         cin >> id >> filed >> value;
     80         //update myclass set name="张大仙" where id='1230011';
     81         string sql = "update stu set " + filed +"='" + value + "' where ID='" + id + "';";
     82         cout << sql << endl;
     83         mysql_query( &mysql, sql.c_str() );
     84         cout << "是否继续(y/n): ";
     85         cin >> id;
     86     } while( id == "y" );
     87 }
     88 
     89 void MysqlDB::print() 
     90 {
     91     // string sql = "select * from info where name = '" + name + "';";  //要有''
     92     string sql = "select * from stu;";
     93     //成功返回0
     94     mysql_query( &mysql, sql.c_str() );
     95     //获取查询查询结果;成功返回result的指针,失败返回NULL
     96     result = mysql_store_result( &mysql );
     97     if( !result )
     98     {
     99         cout << "result error, line : " << __LINE__ << endl;
    100         return ;
    101     }
    102 
    103     int num;
    104     num = mysql_num_fields( result );  //返回字段个数
    105     for( int i = 0; i < num; i++ ) 
    106     {
    107         field = mysql_fetch_field_direct( result, i );  //返回字段类型
    108         cout << field->name << "		";  //输出字段名
    109     }
    110     cout << endl;
    111 
    112     while( row = mysql_fetch_row( result ), row  != NULL ) 
    113     {
    114         for( int i = 0; i < num; i++ ) 
    115         {
    116             cout << row[i] << "		";
    117         }
    118         cout << endl;
    119     }
    120 }
    121 
    122 int main()
    123 {
    124     MysqlDB db;
    125     db.connect( "localhost", "root", "cnp200@HW", "student" ); 
    126     db.print();
    127     
    128     db.add();
    129     db.print();
    130 
    131     db.update();
    132     db.print();
    133 
    134     db.del();
    135     db.print();
    136 
    137     return 0;
    138 }

    参考:

    https://blog.csdn.net/liushall/article/details/81144963

  • 相关阅读:
    IOS开发教程--怎样使用点9图片
    Android studio 自己主动排版
    17 facade
    递归算法时间复杂度分析与改善
    __FUNCTION__, __LINE__ 有助于debug的宏定义
    表名在数据库中的存储大写和小写略解
    七夕节不撸代码你好意思说自己是程序员
    前端开发面试题收集(js部分)
    总体架构
    立即执行的匿名函数
  • 原文地址:https://www.cnblogs.com/henkk/p/11187555.html
Copyright © 2011-2022 走看看