Я бы хотел найти хороший объектно-ориентированный C++ (в отличие от C) обертки для sqlite. Что рекомендуют люди? Если у вас есть несколько предложений, пожалуйста, разместите их в отдельных ответах для голосования. Также, пожалуйста, укажите, есть ли у вас опыт обертки, которую вы предлагаете, и как вы ее нашли.Что такое OO C++-оболочка для sqlite
ответ
Я использовал этот http://www.codeproject.com/KB/database/CppSQLite.aspx но я переехал в C#, так что может быть более новые/лучшие из них в настоящее время
Эта библиотека является блестящим.
Есть ОС Windows и Linux версии библиотеки доступен, и я был запущен и работает в течение нескольких минут.
Я работаю Что в этом прекрасного? – 2010-04-21 02:08:05
Обратите внимание, что библиотека является условно-бесплатной. Я понял об этом, когда изменил весь свой источник ... – NeDark 2010-12-02 22:00:04
На сайте говорится: «Если вы просматриваете локальную копию SQLAPI ++ Web, пожалуйста, посетите официальную страницу заказа на сайте www.sqlapi.com \ Order, чтобы убедиться, что цены подняты -встретиться." Честно говоря, мне неудобно платить за библиотеку кода от разработчика, который не знает, что обратная косая черта не принадлежит к URI. ;) – 2011-09-10 01:32:06
Другим хорошим wraper для баз данных в C++ является SOCI. Это не очень OO, но более современный C++.
Он поддерживает Oracle, PostgreSQL и MySQL. A SQLite backend is in the CVS.
http://www.codeproject.com/KB/database/CppSQLite.aspx просто фантастический, его очень легко порт, я работал над bcb5 (omg) через полчаса или около того. Он примерно такой же тонкий, как вы можете получить и легко понять. Есть много примеров, которые охватывают практически все, что вам нужно знать. Он использует исключения для обработки ошибок - я изменил его, чтобы обеспечить коды возврата в течение нескольких минут. Только сложная проблема заключается в создании собственного файла lib, который не предоставляется.
try
{
CppSQLite3DB db;
db.open(asFileName.c_str());
db.execDML("Update data set hrx = 0");
} // try
catch (...)
{
} // catch
Не может быть гораздо проще, чем это .....
ли вы успешно портировали для MinGW-3.4.5? Вы поделитесь с портированной версией?
Thx.
http://www.codeproject.com/KB/database/CppSQLite.aspx просто фантастический, его очень легко порт, у меня он работал на bcb5 (omg) через полчаса или около того. Он примерно такой же тонкий, как вы можете получить и легко понять. Есть много примеров, которые охватывают практически все, что вам нужно знать. Он использует исключения для обработки ошибок - я изменил его, чтобы обеспечить коды возврата в течение нескольких минут. Только сложная проблема заключается в создании собственного файла lib, который не предоставляется.
использования Qt - он имеет большой привязки для SQLite, которая хорошо вписывается в его общий дизайн
Я не был доволен тем, что мог найти, поэтому я написал свой собственный: sqlite3cc.
Вот пример кода:
sqlite::connection db(filename);
sqlite::command c(db, "UPDATE foo SET bar = ? WHERE name = ?");
c << 123 << name << sqlite::exec;
sqlite::query q(db, "SELECT foo FROM bar");
for(sqlite::query::iterator i = q.begin(); i != q.end(); i++)
std::cout << i->column<std::string>(0) << "\n";
Это действительно пригласив понижающий голос, но здесь идет ...
Я использую sqlite непосредственно из C++ и не вижу никакого значения с добавленным уровнем абстракции C++. Это неплохо (и эффективно), как есть.
Это не обновление, а компиляция и запуск на Mac OS GCC 4.3. Он также выпущен под лицензией MIT, поэтому вы можете использовать его в коммерческом проекте, без проблем. http://code.google.com/p/sqlite3pp/
Использование является повышение маньяков и очень чистый:
sqlite3pp::database db("test.db");
sqlite3pp::transaction xct(db);
{
sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)");
cmd.bind(":user", "Mike");
cmd.bind(":phone", "555-1234");
cmd.execute();
}
xct.rollback();
Я также был не доволен тем, что я мог бы найти. Теперь вы можете написать:
class Person {
public:
Person() {}
static SqlTable<Person>& table() {
static SqlTable<Person> tab = SqlTable<Person>::sqlTable("Person",
SqlColumn<Person>("Firstname", makeAttr(&Reservation::firstname)),
SqlColumn<Person>("Lastname", makeAttr(&Reservation::lastname)),
SqlColumn<Person>("Age", makeAttr(&Reservation::age)),
return tab;
}
std::string firstname;
std::string lastname;
int age;
};
SqliteDB db("testtable.db");
auto sel(db.select<Person>("Firstname=\"Danny\" and Lastname=\"Zeckzer\""));
std::for_each(sel.first, sel.second, [](const Person& p) {
...
Person me;
db.insert<Person>(me);
...
std::vector<Person> everybody;
db.insert<Person>(everybody.begin(), everybody.end());
Метод таблицы все, что нужно писать до тех пор, как вы придерживаться типов sqlite3 данных. Поскольку все является шаблоном, код слоя абстракции не сохраняется после -O. Естественным объединениям требуется класс результатов, аналогичный классу Person. Реализация представляет собой один заголовок с менее чем 500 строк. Лицензия - LGPL. Source
Другим простым является NLDatabase. Отказ от ответственности: Я автор. Основы использования (и, честно говоря, вы не получите гораздо больше, чем «основной» из этого) выглядит следующим образом:
#include "NLDatabase.h"
using namespace std;
using namespace NL::DB;
int main(int argc, const char * argv[]) {
Database db("test.sqlite");
auto results = db.query("SELECT * FROM test WHERE name <> ?").select("TOM");
for (auto const & row : results) {
cout << "column[0]=" << row.column_string(0) << endl;
}
}
И просто для удовольствия, открыть базу данных, выполнить запрос и получить результаты всех в одной строке:
for (auto & row : Database("test.sqlite").query("SELECT * FROM test").select()) {
cout << row.column_string(0) << endl;
}
Я прочитал этот пост и попробовал некоторые из библиотек, упомянутых в ответах,
Но ни один из них не было достаточно легко для меня (я ленивый программист!).
Так я написал свою собственную обертку: sqlite modern cpp
database db("dbfile.db");
// executes the query and creates a 'user' table if not exists
db << "create table if not exists user ("
" age int,"
" name text,"
" weight real"
");";
// inserts a new user and binds the values to '?' marks
db << "insert into user (age,name,weight) values (?,?,?);"
<< 20
<< "bob"
<< 83.0;
// slects from table user on a condition (age > 18) and executes
// the lambda for every row returned .
db << "select age,name,weight from user where age > ? ;"
<< 18
>> [&](int age, string name, double weight) {
cout << age << ' ' << name << ' ' << weight << endl;
};
// selects the count(*) of table user
int count = 0;
db << "select count(*) from user" >> count;
получайте удовольствие!
Я сделал один из-за необходимости в нашей компании. https://www.github.com/rubdos/libsqlitepp Это C++ 11 и только заголовок. Просто поместите заголовок в свой проект, включите его и подключитесь к библиотекам C sqlite.
Примеры должны быть где-то на этом git repo тоже, достаточно просты в использовании.
Все дали хороший совет относительно того, что использовать: я скажу вам, какой инструмент НЕ.
Мой опыт ужасен.
Я просто занимаюсь изучением того, что использует орм, и я тестирую его много.
Слабость:
- нет документации
- нет пояснительной README
- никаких объяснений по предпосылкам
- не компилировать из-за большое количеством bug (не являются истинным, не фиксируются v0.3.17)
- 1. Что такое F #, недостающее OO или императив?
- 2. Что такое no-oo mvc в php?
- 3. Что такое «интерфейс» в программировании OO?
- 4. Что такое модель стоимости sqlite?
- 5. Что такое onUpgrade() в sqlite?
- 6. Что такое? mark в SQLite
- 7. Что такое индекс в SQLite?
- 8. Кодирование Интервью: что моделировать для демонстрации OO?
- 9. Что такое теневая таблица в SQLite?
- 10. Что такое столбец типа datetime в SQLite?
- 11. Что такое rowid базы данных sqlite?
- 12. Что такое простой Java ORM, поддерживающий Sqlite?
- 13. Что такое Datatypes в SQLite, поддерживающий андроид
- 14. Что такое «страница» в документации SQLite?
- 15. Что такое синтаксис для «не равных» в SQLite?
- 16. Что такое команда оболочки для удаления базы данных в sqlite?
- 17. Что такое тип столбца по умолчанию для sqlite?
- 18. Что такое хорошая практика использования DBHelper (SQLite) для Android-приложений
- 19. дизайна OO для бизнеса-логики
- 20. Что именно означает написать API для языка OO?
- 21. Что такое хороший интерфейс Perl OO для создания и отправки электронной почты?
- 22. Что такое ADO.NET?
- 23. Что такое каталог /. для?
- 24. Что такое %% для Python?
- 25. Java: Что такое «для (;;)»
- 26. Что такое SDKDDKVer.h для?
- 27. Что такое $ $ для CKEditor?
- 28. Что такое rc для
- 29. Что такое __CUDANVVM__ для?
- 30. Что такое __gxx_personality_v0 для?
Также ознакомьтесь с перечнем по адресу: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers – User 2011-08-02 18:44:46