Использует ли библиотека базы данных C ++ OTL SQL параметризованные запросы под капотом или string concat?

StackOverflow https://stackoverflow.com/questions/3149974

  •  01-10-2019
  •  | 
  •  

Вопрос

Я просматривал OTL (библиотеку шаблонов Oracle, Odbc и DB2-CLI) для доступа к базе данных C ++.Я не уверен, преобразуется ли запрос, который я передаю, в параметризованный запрос для базовой базы данных, или это в основном просто объединение всех аргументов в одну большую строку и передача запроса в базу данных таким образом.Я вижу, что запрос, который вы ему передаете, может включать информацию о типе аргументов, но что происходит между этим и попаданием запроса в базу данных, я не могу сказать.

Это было полезно?

Решение

Ответ автора OTL на мое электронное письмо:

OTL передает запросы с заполнителями в уровни API базы данных.Соглашения об именовании фактических переменных привязки различны для разных типов БД.Скажем, для 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 с переменными placeholder / bind относительно дороги в создании, поэтому, если вы создаете экземпляр параметризованного SQL с помощью otl_stream, имеет смысл использовать поток как можно чаще.

Если у вас есть еще вопросы или предложения о том, как я могу улучшить руководство OTL, не стесняйтесь, пишите мне по электронной почте.

Твое здоровье, Сергей

фейдбак написал:

Привет, недавно я оценивал библиотеки C ++ DB для использования в качестве основы для библиотеки ORM, которую я хочу создать, и все больше и больше тяготею к OTL.Кстати, это выглядит очень красиво, и, похоже, удовлетворит большинство моих потребностей.У меня просто есть один затянувшийся вопрос, который я, похоже, не могу прояснить, прочитав документы.Передает ли OTL параметризованный запрос базовой СУБД, или он объединяет аргументы и запрос, которые я передаю потоку OTL, в одну строку и передает ее СУБД?

Другими словами, если я передам OTL этот запрос MSSQL вместе со строкой "Bob" в качестве переменной привязки:

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 параметризованные запросы под капотом или string concat?

Спасибо вам за уделенное время

Другие советы

Документация Переговаривает все о переменных связывания. Я предполагаю, что библиотека является Переписывая ваш запрос, но это, вероятно, просто изменение формата переменных связывания в формате, которые ожидают, что ваш DBMS ожидает, а затем связывает значения в переменные связывания.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top