otl中遇到的一些字符数组长度问题

最近做的项目中对于数据库的操作为了有一个统一的操作,所以采用了otl技术作为中间媒介,当然,由于是用了别人的库,所以还是出现了很多问题。通过对问题进行分析,也形成了一些常用问题的处理方法。

在用otl绑定otl_stream的字符串或者字符类型变量中,总是会出现Incompatible data types in stream operation这样的错误,也让我苦恼了很久,后来发现是因为对otl_stream绑定变量的定义的不清晰,以下我用插入语句给大家做个分析:

插入语句中,所写的绑定的字符数组的长度应该实际数组的长度相同(包含'/0'),即比数据库中定义的字符串的长度多以为,因为数据库中不存储末位的'\0'。

例如:

1 int f1=123;
2 char f2[51]="test";
3 otl_stream os(1,"insert into table(f1,f2) values(:1<int>,:2<char[51]>",db);
4 os<<f1<<f2;
5 其中,数据库中f2长度为varchar(50)

对于otl中要插入char类型,必须指定char的长度,即在otl中对于char类型的操作皆按上述的字符数组的规则,即绑定的长度应为2。否则会出现Incompatible data types in stream operation的错误

例如:

1  int f1=123;
2 char f2='a';
3 otl_stream os(1,"insert into table(f1,f2) values(:1<int>,:2<char[2]>",db);
4 os<<f1<<f2;
5 其中,数据库中f2为varchar(1),即char

我在项目中的Mysql数据库中定义了无符号的smallint类型,即为C++中的unsigned short,本来是想直接传入的,后来也总是出现Incompatible data types in stream operation的错误,想了下才知道没有理清otl绑定的类型到底有哪些。在otl中,绑定的数值类型有float,double,int,short,bigint,unsigned(32位无符号),详情请看otl_stream流相关绑定变量。所以若用了unsigned short类型,想绑定otl_stream流时,可以先赋值给unsigned int类型,传入时用unsigned接收,则传入正确,即是截取作用。

转载请注明:http://www.cnblogs.com/fnlingnzb-learner/p/5922673.html

posted @ 2016-09-30 09:32  Boblim  阅读(2085)  评论(1编辑  收藏  举报