千家信息网

mysql编程入门以实例为引导

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文主要给大家介绍mysql编程入门以实例为引导,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在行业资讯里面关注我的更新文章的。#include #include #include
千家信息网最后更新 2026年11月01日mysql编程入门以实例为引导

本文主要给大家介绍mysql编程入门以实例为引导,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在行业资讯里面关注我的更新文章的。

#include
#include
#include
#include
////unsigned int mysql_errno(MYSQL *mysql)

/*
int mysql_init(MYSQL *handle)
{
MYSQL
tmphandle = (MYSQL )malloc(sizeof(MYSQL));
// .....
//...
handle = tmphandle;
}

int main()
{

int     ret = 0, i = 0;MYSQL   mysql;MYSQL   *connect = NULL;    connect = mysql_init(&mysql) ;if (connect == NULL){    ret =  mysql_errno(&mysql) ;    printf("func mysql_init() err \n");    return ret;}printf("func mysql_init() ok \n");connect = mysql_real_connect(connect, "localhost", "root", "mysql", "pos", 0, NULL, 0);if (connect == NULL){    ret =  mysql_errno(&mysql) ;    printf("func mysql_init() err \n");    return ret; }printf("func mysql_real_connect() ok \n");//查询const char *query = "select *from emp";ret = mysql_query(&mysql, query);if (ret != 0){    ret =  mysql_errno(&mysql) ;    printf("func mysql_query() err \n");    return ret; }//typedef char **MYSQL_ROW;               /* return data as array of strings *///typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field *///获取结果集合 //结果集合中 可以含有10行数据MYSQL_RES *result = mysql_store_result(&mysql);if(result==NULL){    ret =  mysql_errno(&mysql) ;    printf("func mysql_query() err \n");    return ret; }unsigned int  num = mysql_field_count(&mysql) ;//从mysql句柄中获取列MYSQL_FIELD  *fields = mysql_fetch_fields(result);//获取表头地址结构体for (i = 0; i

}
这个程序一个很大的问题就是一个入口多个出口,怎么改呢?
即错误处理都让他只有一个出口即可,提示goto语句,后面再详细说
有了上面的知识,实践一下
实现一个小小的mysql工具
#include
#include
#include
#include
int main(int argc,char* argv)
{
int ret = 0, i = 0;

MYSQL   mysql;MYSQL   *connect = NULL;char    sqlbuf[2048];connect = mysql_init(&mysql) ;      if (connect == NULL){    ret =  mysql_errno(&mysql) ;    printf("func mysql_init() err \n");    return ret;}printf("func mysql_init() ok \n");connect = mysql_real_connect(connect, "localhost", "root", "123456", "mydb2", 0, NULL, 0);if (connect == NULL){    ret =  mysql_errno(&mysql) ;    printf("func mysql_init() err \n");    return ret; }printf("func mysql_real_connect() ok \n");for (;;){    memset(sqlbuf, 0, sizeof(sqlbuf));    printf("\nplease enter you sql: ");    fgets(sqlbuf,sizeof(sqlbuf),stdin);    buf[strlen(sqlbuf)-1]=0;     /* EXIT(exit):退出 */      if ( 0 == strncmp(sqlbuf , "exit" , 4) || 0 == strncmp(sqlbuf , "EXIT" , 4) ||         0 == strncmp(sqlbuf , "quit" , 4) || 0 == strncmp(sqlbuf , "QUIT" , 4) )     {        break;    }    ret = mysql_query(&mysql, "set names utf8");//避免中文乱码    if (ret != 0)    {        ret =  mysql_errno(&mysql) ;        printf("func mysql_query() err \n");        return ret;     }    ret = mysql_query(&mysql, sqlbuf);    if (ret != 0)    {        ret =  mysql_errno(&mysql) ;        printf("func mysql_query() err \n");        return ret;     }    if (strncmp("select", sqlbuf, 6)==0 ||  strncmp("SELECT", sqlbuf, 6)==0)    {        //获取结果集合         //结果集合中 可以含有10行数据        MYSQL_RES *result = mysql_store_result(&mysql);        //使用的过程中在获取 结果        //MYSQL_RES *result = mysql_use_result(&mysql);        //        unsigned int  num = mysql_field_count(&mysql) ;        //获取表头        MYSQL_FIELD  *fields = mysql_fetch_fields(result);        for (i = 0; i

}

这样一个小工具就完成了,用没有问题呢?如果你输入backspace键和delete和上下键呢?问题出现了,如何解决呢?
请看下面代码
#include

struct termios oldterm;
void setstty2()//设置输入退格键,不回显
{
//system("stty erase ^H");//执行shell命令,也可以 用来设置读取用户键盘输入的时候,退格键不回显

struct termios term;if(tcgetattr(STDIN_FILENO, &term) == -1)//得到系统termion的设置{    printf("tcgetattr error is %s\n", strerror(errno));    return;}oldterm = term;//保留当前termios设置,以便程序退出的时候可以恢复termios //tty/*term.c_lflag &= ~ICANON;//取消ICANON选项(不规范输入)term.c_lflag |= ICANON;//设置ICANON选项(规范输入)term.c_cc字段为要设置的具体特殊输入字符,如c_cc[VERASE]代表退格键,term.c_cc[VERASE] = '\b';意思为把退格键修改为'\b'VERASE代表向前擦出一个字符,VINTR代表发送ctrl + C中断信号,ctrl + c的ASCII码为3例如:term.c_cc[VINTR] = '\t';意思为将tab键设置为终端信号tcsetattr中,第二个参数说明,TCSAFLUSH:发送了所有输出后更改才生效,在更改发生时,未读取的所有输入数据都被删除TCSANOW:更改立即生效TCSADRAIN:发送了所有输出后更改才发生,如果更改输出参数则应该使用该选项*/term.c_cc[VERASE] = '\b';//'\b'为退格键的ASCII码if (tcsetattr(STDIN_FILENO, TCSANOW, &term) == -1)//设置系统termion{    printf("tcsetattr error is %s\n", strerror(errno));}return;

}

void setstty()//设置输入退格键,不回显
{
system("stty erase ^H");//执行shell命令,也可以 用来设置读取用户键盘输入的时候,退格键不回显

}

void returnstty()//恢复系统的termios设置
{
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &oldterm) == -1)//设置系统termion
{
printf("tcsetattr error is %s\n", strerror(errno));
}
return;
}

这是另外一套函数,可以用到时再去学习它
Linux中SQLplus上下键不能显示历史命令的问题
在Linux的sqlplus中运行SQL语句之后,想用上下键把历史命令找出来,发现不支持。
按照下面的步骤可以设置
1,从http://download.csdn.net/user/kkdelta下载 rlwrap2,安装rlwrap
1.[root@localhost]# tar -zxvf rlwrap-0.30.tar.gz
br/>3.[root@localhost rlwrap-0.30]# ./configure
br/>5.[root@localhost rlwrap-0.30]# make install
3,使用rlwrap,rlwrap sqlplus / as sysdba
这时候,熟悉的上下键功能有回来了。
4,设置别名,让sqlplus默认在rlwrap方式下运行。
[root@localhost rlwrap-0.30]# vi /home/oracle/.bash_profile
添加下面的内容
alias sqlplus='rlwrap sqlplus'
alias定义中使用的是单引号,而不是TAB上面的那个,/home/oracle/是oracle用户的主目录。
上面的设置需要Oracle用户重新登录,
如果上面的设置不起作用的话,可以设置在/home/oracle/.bashrc中,这样每次改变到bash的时候都会设置alias。
用type sqlplus验证,如果显示下面的信息证明alias设置成功。
sqlplus is aliased to 'rlwrap sqlplus'
rlwrap
rlwrap is a wrapper that uses the GNU readline library to allow the editing of keyboard input for any other command. Input history is kept between invocations, separately for each command; history completion and search work as in bash and completion word lists can be specified on the command line.

看了以上关于mysql编程入门以实例为引导,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。

输入 面的 问题 结果 上下 命令 时候 用户 系统 代表 数据 输出 实例 编程 信号 内容 历史 参数 字符 工具 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 广州大一互联网络科技有限公司 互联网科技公司的优势 互联网科技革命 银优互联网科技有限公司 互联网科技网站 安控科技rtu产品工业互联网 广州慧亚互联网科技怎么样 贵州叶脉互联网科技有限公司所属行业 苏州五指互联网络科技有限 赶超互联网科技 微信多开 滨湖区互联网智能科技产品有哪些 深圳互联网科技的发展 广州千川互联网科技有限公司 互联网相关科技技术 西安有哪些互联网高科技企业 陕西九四连强互联网科技有限公司 北京天晋互联网科技有限公司 科技信息时代互联网发展 科技互联网公司两年变化 互联网科技垄断 深圳互联网络科技有限公司 互联网科技英文 顺玮阁互联网科技 深圳期待互联网科技 河南猎农互联网科技有限公司 昭通互联网科技选哪家 中国互联网公司排名锤子科技 山东有哪些互联网科技公司 好易买互联网科技
0