@neosapient
VC9, VC11, QT4, QT5, MySQL

Есть ли генератор SQL кода на C++ сразу под несколько БД (MySQL, SQLite, MS SQL)?

Здравствуйте.

Ищу библиотеку на С++, которая стандартизует генерацию SQL запросов и работу с разными БД: MySQL, SQLite, MS SQL.
Есть ли готовое решение, чтобы не писать свой велосипед?
Ищу, что-нибудь простое и легковесное. Или как вариант - популярное в сообществе.

Подробнее о проблеме:
Периодически приходиться писать программы, которые работают с разными БД.
Программы в общем простые:
- проверить наличие таблицы и создать таблицу,
- проверить наличие поля в таблице, проверить тип поля и отредактировать поля таблицы
- произвести SELECT, INSERT и UPDATE и прочесть результат, либо обработать ошибку.

Но как говориться, дьявол кроется в деталях. Например, автоинкремент может писаться по-разному.
Для MySQL используется 'AUTO_INCREMENT':
CREATE TABLE MyTable (
	id INT NOT NULL AUTO_INCREMENT,
	PRIMARY KEY(id)
);

Для MS SQL используется 'IDENTITY':
CREATE TABLE MyTable  
(
 id INTEGER PRIMARY KEY IDENTITY(1,1)
);

Для SQLite используется 'AUTOINCREMENT ':
CREATE TABLE `MyTable` (
  `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL);


Другой пример: отправить INSERT-запрос, в котором в одно из полей надо вставить время в секундах от 1970 года.
MySQL: UNIX_TIMESTAMP()
SQLite: strftime('%s', 'now', 'localtime')
MS SQL: dbo.UNIX_TIMESTAMP(GETDATE())

О себе:
Windows, MS VS 2008, MySQL 5.6, MS SQL 2008, SQLite 3
  • Вопрос задан
  • 935 просмотров
Решения вопроса 2
@iHateInventNames
Видимо, вы говорите про ORM
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C++
Библиотеку для абстрагирования работы с разными СУБД могу посоветовать такую: https://github.com/SOCI/soci , только это не ORM, а именно абстракция от конкретной СУБД и конкретной клиентской библиотеки. Вообще под плюсами ORM не особо живут и плодятся ввиду принципиального отсутствия рефлексии в языке. Какие-то были на базе Qt (MOC как раз и обеспечивает для них наличие мета-объектов), но они слабо развиваются.

Советую еще раз поразмыслить над необходимостью именно генерировать SQL-запросы - возможно вам стоит писать их самому (тем более раз у вас действия простые), а вот абстракция от СУБД как раз бы пригодилась вам.
Я конечно не знаю, что у вас за проект, но раз вы используете плюсы, то у вас либо какой-то сервис с низким содержанием бизнес-логики (например, принимающий данные от устройств и пишущий базу), либо иное обслуживающее ПО, в которых обычно не очень много SQL-запросов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы