Использует ли библиотека баз данных C ++ OTL SQL параметризованные запросы под капотом или concat строки? - PullRequest
4 голосов
/ 30 июня 2010

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

Ответы [ 2 ]

5 голосов
/ 30 июня 2010

Ответ автора 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 с переменными-заполнителями / связыванием относительно дороги в создании, поэтому, если вы создаете экземпляр параметризованного SQL через otl_stream, имеет смысл повторно использовать поток столько, сколько вы можете.

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

Приветствия, Сергей

pheadbaq писал:

Привет, я оценивал библиотеки 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 с использованием параметризованных запросов подкапюшон или струнный конкат?

Спасибо за потраченное время

1 голос
/ 30 июня 2010

В документации говорится все о переменных связывания. Я предполагаю, что библиотека переписывает ваш запрос, но, вероятно, просто изменяет формат переменных связывания на формат, ожидаемый вашей СУБД, а затем связывает значения с переменными связывания.

...