mysql stmt fetch,mysql_stmt_fetch 奇怪的问题..
我按照mysql参考手册上的例子做的东东..为什么老是出现数据截断问题..
而手册上说一般不会出现的.--中的内容来自手册
------------------------------------------------------------------------------------
MYSQL_DATA_TRUNCATED
出现数据截短。
不返回MYSQL_DATA_TRUNCATED,除非用mysql_options()启用了截短通报功能。返回该值时,为了确定截短的参数是哪个,可检查MYSQL_BIND参数结构的错误成员。
---------------------------------------------------------------------------
SQL代码:
--创建表
CREATE TABLE userinfo
(
userid int,
username varchar(31)
);
--------------------------------------
INSERT INTO test.userinfo
(userid, username)
VALUES (1, '张三');
INSERT INTO test.userinfo
(userid, username)
VALUES (2, '李四');
INSERT INTO test.userinfo
(userid, username)
VALUES (3, '王王');
----------------------------------------------------------------
c++代码:
#include
#include
#include
#include "mysql.h" //在工程设置中,包含在mysql的sdk中的include文件夹下
using namespace std;
string host = "localhost"; //登陆mysql使用的主机名
string user = "root"; //登陆用户
string pwd = "sa"; //填写自己数据库密码
string dbname = "test"; //您要登陆的数据库名
unsigned int port = 3306; //数据库端口,默认为3306,也可以填写你自己制定的端口
string sql = "select * from userinfo"; //sql语句,下面使用接口在c语言中执行该语句
string sqlProcess = "call getUserArea2(3)"; //sql存储过程语句
int status; //数据库执行返回的状态,sql语句执行成功返回0
int main()
{
MYSQL *mysql;
mysql = mysql_init(0); //接口,初始化
MYSQL_RES *result;
MYSQL_ROW row; //返回数据行
unsigned long length[2];
int row_count;
int int_data;
char str_data[5000];
my_bool is_null[2];
//连接数据库
if (mysql_real_connect(mysql, host.c_str(), user.c_str(), pwd.c_str(), dbname.c_str(), port, NULL, CLIENT_FOUND_ROWS | CLIENT_MULTI_STATEMENTS) == NULL)
{
cout << "connect failure!" << endl;
return 0;
}
else
{
cout << "connect success!" << endl;
}
mysql_set_character_set(mysql, "gbk");
//使用预处理
char sql[] = "select userid,username from userinfo where userid!=(?)"; //"call getUserArea(?)"; //
MYSQL_STMT *stmt = mysql_stmt_init(mysql);
if (mysql_stmt_prepare(stmt, sql, strlen(sql)))
{
printf(mysql_stmt_error(stmt));
return 0;
}
int param_count = mysql_stmt_param_count(stmt);
int t1 = 1;
MYSQL_BIND inBind;
memset(&inBind, 0, sizeof(inBind));
inBind.buffer_type = MYSQL_TYPE_LONG;
inBind.buffer = (char *)&t1;
inBind.is_null = 0;
inBind.length = 0;
if (mysql_stmt_bind_param(stmt, &inBind))
{
printf(mysql_stmt_error(stmt));
return 0;
}
if (mysql_stmt_execute(stmt))
{
printf(mysql_stmt_error(stmt));
}
MYSQL_BIND outBind[2];
memset(outBind, 0, sizeof(outBind));
//INTEGER COLUMN
outBind[0].buffer_type = MYSQL_TYPE_LONG;
outBind[0].buffer= (char *)&int_data;
outBind[0].is_null= &is_null[0];
outBind[0].length= &length[0];
//STRING COLUMN
outBind[1].buffer_type= MYSQL_TYPE_STRING;
outBind[1].buffer= (char *)str_data;
outBind[1].buffer_length= 5000;
outBind[1].is_null= &is_null[1];
outBind[1].length= &length[1];
if (mysql_stmt_bind_result(stmt, outBind))
{
fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
exit(0);
}
/* Now buffer all results to client */
if (mysql_stmt_store_result(stmt))
{
fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
exit(0);
}
int rows = mysql_stmt_num_rows(stmt);
for( my_ulonglong i=0; i
{
int r = mysql_stmt_fetch(stmt);
//出现数据截断。就是这里出错的....
if(r == MYSQL_DATA_TRUNCATED) {
fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
}
fprintf(stdout, "column1: ");
if (is_null[0]) fprintf(stdout, " NULL\n");
else fprintf(stdout, " %d(%ld)\n", int_data, length[0]);
/* column 2 */
fprintf(stdout, "column2:");
if (is_null[1]) fprintf(stdout, " NULL\n");
else fprintf(stdout, " %s(%ld)\n", str_data, length[1]);
}
mysql_stmt_close(stmt);
return 0;
}
作者: yeerh
发布时间: 2011-01-22
mysql stmt fetch,mysql_stmt_fetch 奇怪的问题..相关推荐
- pdo mysql fetchall_pdo fetch,pdo fetchAll,pdo query,pdo prepare用法举例
通过pdo来从数据库中调取数据. 其中主要涉及到 pdo fetch,pdo fetchAll,pdo query,pdo prepare使用 . 可以通过以下几种方式,学习下php pdo的用法. ...
- mysql存储过程fetch into_存储过程fetch into
SQL Server 中,对结果集及游标的使用[总结] 一.对结果集使用的解决办法 如何在存储过程中使用另一个存储过程的结果集,或者对动态SQL语句的执行结果再次使用,可以使用下面这样的语句: INS ...
- mysql size_mysql fetch size 相关问题
默认情况下,MySQL的JDBC驱动会一下子把所有row都读取下来,这在一般情况下是最优 的,因为可以减少Client-Server的通信开销.但是这样也有一个问题,当数据库查询结 果很大时,特别当不 ...
- mysql 的capi预处理
25.2.4. C API预处理语句 MySQL客户端/服务器协议提供了预处理语句.该功能采用了由mysql_stmt_init()初始化函数返回的MYSQL_STMT语句处理程序数据结构.对于多次执 ...
- mysql优化 top_Top 20+ MySQL Best Practices【sql优化】
Database operations often tend to be the main bottleneck for most web applications today. It's not o ...
- MySQL性能优化的21条最佳经验【转】
转载自http://www.cnblogs.com/jiaosq/p/5843437.html 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只 ...
- 转:MySQL性能优化的最佳20+条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...
- php mysql PDO 查询操作的实例详解
php mysql PDO 查询操作的实例详解 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- Spark与Mysql(JdbcRDD)整合开发
在Spark中提供了一个JdbcRDD类,该RDD就是读取JDBC中的数据并转换成RDD,之后我们就可以对该RDD进行各种的操作.我们先看看该类的构造函数: JdbcRDD[T: ClassTag]( ...
- mysql leave的作用_MySQL数据库中DELIMITER的作用
以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 下面是一个 ...
最新文章
- 计算机硬盘能否做u盘用怎么用,U盘能一直插在电脑上当硬盘用吗?
- mybatis里的log适配器模式
- 虚拟化运维平台云安对政府机构的解决方案
- 用数组选出最大的数并且排序
- NEC描绘智慧城市蓝图
- OPPO宣布与哈苏达成影像战略合作
- pytest测试框架(七)---pytest与jenkins集成(pytest+jenkins+allure)
- 设计模式(十五)——桥接模式
- unity3d 材质概述 ---- shader
- 关于计算机中 二进制位(bit)、字节(Byte)、 千字节(KB)等之间的关系
- 洛谷4577 LOJ2521:[FJOI2018]领导集团问题——题解
- 响应式微服务架构-分布式系统设计原则
- Oracle自定义函数示例
- Web3 – The Decentralized Web
- 弘辽科技:多多进宝怎么找团长?多多进宝怎么找推手推广?
- 前后端分离整合阿里云OSS图片上传功能
- opta planner_使用Excel Christmas Planner进行整理
- springboot 实现 订单 和 微信扫码支付 功能
- SQL中去除重复数据的几种方法,我一次性都告诉你​
- ubuntu 12.04英文版设置成中文版