• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql多次调用存储过程的问题

mysql多次调用存储过程的问题

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql调用存储过程,c#调用mysql存储过程,php调用mysql存储过程,mysql存储过程实例,mysql创建存储过程等相关知识,希望本文的分享对您有所帮助
问题是这样的,在直接使用mysql c api构建应用的时候,一个连接只能执行一次存储过程,不管怎样free再次利用这个连接的时候就会出现不能执行qurry的提示,我想,这么大型的软件 不会存在这样的基础性问题吧,毕竟大多数的adodb都是基于c api的,难道所有的软件都无法进行连接缓存?

别说,接触到这类问题的人还真不多,大多数的连接池都写好了,谁会去直接构建连接进行操作呢,所以baidu google基本都没有结果,今天回头来解决这个问题,突然就有了突破,找到了一篇文章《对Mysql的C API调用存储过程的问题及解决方法分析》,正是我的问题。
作者分析的挺复杂了,其实我们一般只用mysql_query、mysql_use_result等几个函数,问题的症结在于当执行一个存储过程的时候, 数据库返回的是多个数据集合,即使只有一个数据集合,他也会有一个空集合用于结束一次回话,作者骂他变态,其实不然,可能作者考虑到的只是一般的请 求,mysql是给所有用户使用的,说不能真有变态的人把图片文件等等直接保存在mysql字段里面,那么回复就不可能一次完成,需要多此网络交互,那么 所有的交互肯定需要一个结束符号,并且存储过程本来就可以返回多个数据集合,如果他在c pai中只做一个结果己处理就允许下一次全新的请求,那么对于同一连接,在mysql服务断其实还有没有发送完成的数据,这个时候他安全的做法就是不接受 任何新的请求,直到数据发送完全,或者连接关闭,不然,mysql协议解析就会出现问题,下次发送就会出现黏包或者丢包,所以他的做法是完全正确的,即使 只有一个结果集合,也需要当前会话内的通讯(比如mysql_next_result)确认完毕,然后结束本次请求,这个时候服务端其实没有数据了,但是 这个过程是不能省略的,然后在不关闭连接的情况下就可以进行全新的请求了。
所以总结起来就是:使用存储过程的时候一定要循环执行,把所有的结果集合都取到,直到为空,这个时候当前数据库连接才可以安全归还回去,下面是demo。
经过上面的循环读取就能够保证一条连接会干净地归还到连接池,当然有的连接池可能已经把后面一个循环放在连接池中处理了,解释说把剩余的数据集全部取过来然后释放,这样比如在php等里面使用mysql的连接池的时候就没有感受到上面说的问题。 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL DNS的使用过程详细分析
  • mysql存储过程详解
  • MySql存储过程异常处理示例代码分享
  • Mysql使用大全 从基础到存储过程
  • mysql多次调用存储过程的问题
  • mysql 让一个存储过程定时作业的代码
  • MySQL 存储过程的基本用法介绍
  • MySQL 有输入输出参数的存储过程实例
  • mysql 动态执行存储过程语句
  • mysql 教程 存储过程

相关文章

  • 2017-05-11完全卸载mysql(停止服务、卸载相关程序、删除注册表
  • 2017-05-11在数据库里将毫秒转换成date格式的方法
  • 2018-12-05oracle sys_connect_by_path 函数 结果集连接
  • 2018-12-05最新MySQL数据库漏洞情况通报_MySQL
  • 2018-12-05sql server:alter database name的问题
  • 2018-12-05实例讲解如何利用crontab定时备份MySQL
  • 2017-09-02MySQL创建用户并授权及撤销用户权限
  • 2018-12-05 SQL Server存储过程的编写和优化措施
  • 2018-12-05SQL事务用法begin tran,commit tran和rollback tran的用法
  • 2018-12-05最全的MySQL调试与优化技巧

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQL2005服务器因重装改名后出错的拒绝方法
    • 文本、Excel、Access数据导入SQL Server2000的方法
    • 关于设计经验的10篇课程推荐
    • php连接mysql数据库详细步骤(图文)
    • win2003服务器下配置 MySQL 群集(Cluster)的方法
    • Acc数据库转SQL数据库工具(简体中文绿色版)和使用方法
    • mysql myisam 优化设置设置
    • SQL Server 2008中的代码安全(八)透明加密(TDE)
    • MySQL防止delete命令删除数据的两种方法
    • MHA自动Failover与手动Failover的切换原理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有