Помощник SQL-запроса для C ++ - PullRequest
3 голосов
/ 24 января 2011

Я ищу библиотеку, которая упростит работу с SQL в C ++.Я знаю, что есть разные решения ORM (например, перечисленные здесь ), и я быстро просмотрел их, но я, вероятно, ищу что-то другое (не совсем ORM), так что если выможет помочь ...

Я хочу что-то, что не будет инкапсулировать доступ к базе данных и т. д., но будет действовать скорее как построитель запросов и связыватель, и я сам выполняю запросы.Я ожидаю, что это позволило бы мне упростить обработку SQL и в то же время иметь доступ к выполнению пользовательских запросов, не обязательно оставаясь в объектной модели.

На данный момент самая близкая вещь, которую я нашел, - эта библиотека шаблонов базы данных , которая позволяет определить привязку следующим образом:

   boundIOs["INT_VALUE"]    == rowbuf.exampleInt;
   boundIOs["STRING_VALUE"] == rowbuf.exampleStr;

(столбец INT_VALUE связан с полем exampleInt объекта), а затем выполнить запросы с использованием таких привязок,который я нахожу довольно удобным и достаточно гибким одновременно.

Я определенно поближе познакомлюсь с этой библиотекой, но, возможно, вы могли бы также предложить какую-то другую библиотеку / среду, которая использует аналогичные идеи и является болеепопулярный / зрелый / поддерживаемый и т. д., или поделиться своим опытом с этой библиотекой DTL?Благодаря.

Ответы [ 2 ]

1 голос
/ 24 января 2011

OTL имеет симпатичный интерфейс, который не имеет модели ORM.

Он использует потоки для установки / получения переменных связывания. Простой пример показан ниже

otl_stream i(50, // buffer size
              "select * from test_tab where f1>=:f<int>" // SELECT statement,
              db // connect object
             ); 
i<<8; // assigning :f = 8

//execute query
while(!i.eof()){ // while not end-of-data
    i>>f1>>f2;
    cout<<"f1="<<f1<<", f2="<<f2<<endl;
}

Вы можете увидеть больше примеров здесь

Редактировать, показывая, как связывание нескольких переменных тривиально

otl_stream i(50, // buffer size
              "select * from test_tab where f1>=:f<int> AND f2=:g<int> and f3=:h<int> and f4=:i<int>" // SELECT statement,
              db // connect object
             ); 
i << 8 << 10 << 12 << 42;

//execute query
while(!i.eof()){ // while not end-of-data
    i>>f1>>f2;
    cout<<"f1="<<f1<<", f2="<<f2<<endl;
}

Как видите, вы определяете свои заполнители и их типы один раз f1>=:f<int> AND f2=:g<int>. Затем вы передаете свои значения в запрос (который является безопасным с точки зрения типов) перед его выполнением.

0 голосов
/ 02 февраля 2011

Наконец, я не нашел ни одной библиотеки, не пытающейся скрыть доступ к базе данных, большинство библиотек стараются быть слишком похожими на ORM. Поэтому я просто применил подход связывания DTL и написал несколько помощников по обработке текста для создания необходимых мне запросов SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...