簡體   English   中英

C ++ OTL SQL數據庫庫是否使用參數化查詢或字符串連接?

[英]Is C++ OTL SQL database library using parameterized queries under the hood, or string concat?

我一直在尋找用於C ++數據庫訪問的OTL(Oracle,Odbc和DB2-CLI模板庫)。 我不確定我傳入的查詢是否轉換為底層數據庫的參數化查詢,或者它是否基本上只是將所有參數連接成一個大字符串並將查詢傳遞給數據庫。 我看到你傳遞給它的查詢可以包含參數的類型信息,但是當時和查詢命中數據庫之間會發生什么,我無法分辨。

OTL作者對我的電子郵件的回復:

OTL將帶占位符的查詢傳遞到DB API層。 對於不同的DB類型,實際綁定變量的命名約定是不同的。 對於Oracle來說,

SELECT * FROM staff WHERE fname=:f_name<char[20]>

將被翻譯成:

SELECT * FROM staff WHERE fname=:f_name

加上一堆主機變量綁定調用。

對於MS SQL Server或DB2,相同的SELECT將如下所示:

SELECT * FROM staff WHERE fname=?

手冊中描述了對於MS SQL,DB2,您不能多次使用具有相同名稱的占位符。 使用占位符/綁定變量的SQL語句創建起來相對昂貴,因此如果通過otl_stream實例化參數化SQL,則盡可能多地重用流是有意義的。

如果您有更多問題或有關如何改進OTL手冊的建議,請隨時給我發電子郵件。

干杯謝爾蓋

pheadbaq寫道:

嗨,我最近一直在評估C ++ DB庫,作為我希望構建的ORM庫的基礎,並且越來越多地傾向於OTL。 順便說一下它看起來很漂亮,似乎它可以滿足我的大部分需求。 我只是有一個揮之不去的問題,我似乎無法通過閱讀文檔來澄清。 OTL是否將參數化查詢傳遞給底層DBMS,或者它是否將參數和查詢連接到OTL流並將其傳遞到單個字符串並將其傳遞給DBMS?

換句話說,如果我將OTL這個MSSQL查詢以及字符串“Bob”作為綁定變量傳遞給OTL:

SELECT * FROM staff WHERE fname = :f_name<char[20]>

OTL解析器是否產生這個:

SELECT * FROM staff WHERE fname = 'Bob'

或這個:

SELECT * FROM staff WHERE fname = @f_name

以及我的字符串作為參數

我已經向StackOverflow.com發布了同樣的問題,如果你想在那里做出回應: C ++ OTL SQL數據庫庫是否使用參數化查詢或字符串連接?

感謝您的時間

該文檔討論了綁定變量的所有內容。 我假設庫正在重寫您的查詢,但它可能只是將綁定變量的格式更改為您的DBMS期望的格式,然后將值綁定到綁定變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM