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


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

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

    插入语句中,所写的绑定的字符数组的长度应该实际数组的长度相同(包含'/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

  • 相关阅读:
    Mysql数据库再度使用
    搭建wamp php环境
    phpMyAdmin
    windows激活全系列
    web常见之音乐播放器
    web常见效果之轮播图
    ASP.NET Web Pages
    Eclipse配置中文(汉化)
    以有涯随无涯
    How to get the edited text from itext in fabricjs
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/5922673.html
Copyright © 2020-2023  润新知