otl中遇到的一些字元陣列長度問題

2021-09-07 07:01:49 字數 1221 閱讀 6744

最近做的專案中對於資料庫的操作為了有乙個統一的操作,所以採用了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,:2

",db);

4 os5 其中,資料庫中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,:2

",db);

4 os5 其中,資料庫中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接收,則傳入正確,即是擷取作用。

求傳入函式中的陣列長度

摘自 一般來說陣列傳入函式裡面後會退化為指標,sizeof則沒有用了,所以一般都要多傳入乙個陣列長度。但是還是有辦法求長度的。下面三個方法的原理都是利用array size函式把陣列的長度騙取 出來,而且利用 號過濾 指標.template struct size template size arr...

求傳入函式中的陣列長度

摘自 一般來說陣列傳入函式裡面後會退化為指標,sizeof則沒有用了,所以一般都要多傳入乙個陣列長度。但是還是有辦法求長度的。下面三個方法的原理都是利用array size函式把陣列的長度騙取出來,而且利用 號過濾 指標.template struct size template size arra...

c 中陣列長度的幾種定義

1.定義與已知陣列長度的一維陣列 已知nums,定義res.int res new int nums.length 方括號裡是陣列的長度,nums.length是乙個數,表示nums的長度想再定義陣列的內容 int res new int 3 大括號代表長度為3的陣列的內容2.定義與乙個陣列長度為s...