Me gustaría encontrar un buen contenedor C++ orientado a objetos (en lugar de C) para sqlite. ¿Qué recomienda la gente? Si tiene varias sugerencias, póngalas en respuestas separadas para fines de votación. Además, indique si tiene alguna experiencia con el contenedor que está sugiriendo y cómo lo encontró para usar.Qué es un buen contenedor OO C++ para sqlite
Respuesta
he utilizado éste http://www.codeproject.com/KB/database/CppSQLite.aspx pero me he trasladado a C#, lo que puede haber más nuevos mejores que ahora/
Esta biblioteca es brillante.
Hay versiones para Windows y Linux de la biblioteca disponible y yo estaba en funcionamiento en cuestión de minutos.
Soy cur ¿Qué tiene de brillante? –
Observe que la biblioteca es shareware. Me di cuenta de eso cuando cambié todo mi código fuente ... – NeDark
El sitio dice "Si está navegando una copia local de SQLAPI ++ Web, visite la página oficial de pedidos en www.sqlapi.com \ Ordene verificar que los precios hayan subido -hasta la fecha." Sinceramente, me incomoda pagar una biblioteca de códigos de un desarrollador que no sabe que la barra invertida no pertenece a un URI. ;) –
Otro buen wraper para bases de datos en C++ es SOCI. No es muy OO, pero el C++ es más moderno.
Es compatible con Oracle, PostgreSQL y MySQL. A SQLite backend is in the CVS.
http://www.codeproject.com/KB/database/CppSQLite.aspx es simplemente fantástico, es muy fácil de portar, lo tuve trabajando en bcb5 (omg) en media hora más o menos. Es lo más delgado posible y fácil de entender. Hay una buena cantidad de ejemplos que cubren casi todo lo que necesita saber. Utiliza excepciones para el manejo de errores. Lo modifiqué para proporcionar códigos de retorno en minutos. El único problema complicado es crear su propio archivo lib. Ninguno se proporciona.
try
{
CppSQLite3DB db;
db.open(asFileName.c_str());
db.execDML("Update data set hrx = 0");
} // try
catch (...)
{
} // catch
No pudo ser mucho más simple que esto .....
¿Se han portado con éxito para MinGW-3.4.5? ¿Compartirás la versión portada?
Thx.
http://www.codeproject.com/KB/database/CppSQLite.aspx es simplemente fantástico, es muy fácil de portar, lo tuve trabajando en bcb5 (omg) en media hora más o menos. Es lo más delgado posible y fácil de entender. Hay una buena cantidad de ejemplos que cubren casi todo lo que necesita saber. Utiliza excepciones para el manejo de errores. Lo modifiqué para proporcionar códigos de retorno en minutos. El único problema complicado es crear su propio archivo lib. Ninguno se proporciona.
uso de Qt - que tiene un gran vinculante para SQLite que encaja muy bien en su diseño general
No estaba contento con ninguno que pudiera encontrar tampoco, así que escribí el mío: sqlite3cc.
Aquí está un ejemplo de código:
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";
¿Ya no está disponible para su descarga? – NeDark
Sí, está disponible. Simplemente no ha habido lanzamientos adecuados todavía. Puede obtener el código fuente del repositorio bazar [aquí] (http://www.waxworlds.org/edam/software/sqlite3cc#repository) o [aquí] (https://code.launchpad.net/sqlite3cc) (tendrás que descargar las herramientas de Bazar RCS desde [aquí] (http://bazaar.canonical.com/) si no las tienes) o puedes ver el código fuente en línea [aquí] (http: //bazaar.launchpad.net/~edam/sqlite3cc/trunk/files) – edam
Esto es muy atractivo abajo-votos, pero aquí va ...
Uso sqlite directamente desde C++, y no veo ningún valor con una capa de abstracción añadida de C++. Es bastante bueno (y eficiente) como es.
Bueno, solo obtuviste -4 para los dos votos a favor y yo te voté a favor. El uso de la interfaz C ciertamente es una opción y es probable que sea la que elijamos. Por supuesto, podemos usar algunas envolturas ligeras de C++, posiblemente boost :: shared_ptr con modificadores personalizados, y posiblemente una excepción para manejar errores, pero no una necesidad real de una gran API. – CashCow
@CashCow: Sí, gracias, hice lo mismo. –
Del mismo modo, al final, esta fue la alternativa más sensata que tuvimos también. – WhozCraig
Aquí hay uno que no se ha actualizado por un tiempo, pero se compila y se ejecuta en Mac OS GCC 4.3. También se lanzó bajo la licencia MIT, por lo que puede usarlo en un proyecto comercial, sin problemas. http://code.google.com/p/sqlite3pp/
El uso es impulso ified y muy limpio:
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();
también que no estaba contento con lo que he podido encontrar. Ahora se puede escribir:
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());
El método de la tabla es todo lo que necesita para escribir, siempre y cuando usted se pega a los tipos de datos sqlite3. Como todo es una plantilla, no queda mucho código de capa de abstracción después de -O. Las uniones naturales requieren una clase de resultado similar a la clase Persona. La implementación es un encabezado único con menos de 500 líneas. La licencia es LGPL. Source
Otro simple es NLDatabase. Descargo de responsabilidad: soy el autor. El uso básico (y para ser honesto, usted no obtiene mucho más que "básica" de éste) tiene el siguiente aspecto:
#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;
}
}
Y sólo por diversión, abrir una base de datos, ejecutar una consulta y buscar los resultados de todos en una línea:
for (auto & row : Database("test.sqlite").query("SELECT * FROM test").select()) {
cout << row.column_string(0) << endl;
}
he leído este post y trataron algunas de las bibliotecas mencionadas en las respuestas,
Pero ninguno de ellos era lo suficientemente fácil para mí (soy un programador perezoso!).
así que escribí mi propio envoltorio: 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;
Que se diviertan!
Hice uno debido a la necesidad en nuestra empresa. https://www.github.com/rubdos/libsqlitepp Es C++ 11 y encabezado solamente. Simplemente coloque el encabezado en su proyecto, inclúyalo y enlace a las bibliotecas C sqlite.
Los ejemplos deben estar en algún lugar en ese git repo también, bastante fácil de usar.
Todo el mundo han dado buenos consejos sobre lo que debe utilizar: te voy a decir qué instrumento NO uso.
Mi experiencia es terrible.
Estoy haciendo algunas investigaciones sobre el uso de orms, y estoy probando mucho.
Debilidades:
- ninguna documentación
- sin README explicativa
- ninguna explicación sobre los requisitos previos
- no elaboren, debido a una gran cantidad de bug (no es cierto, no es fijo, v0.3.17)
- 1. Secreto para lograr un buen OO Design
- 2. ¿Hay un contenedor .NET/C# para SQLite?
- 3. ¿Alguien tiene un buen contenedor de memoria compartida para C++?
- 4. ¿Qué es un buen compilador de c
- 5. ¿Qué es un buen decompilador de C?
- 6. buen ejemplo de OO JS?
- 7. Aprendiendo OO para un programador en C
- 8. ¿Qué es un buen escaparate para Clojure?
- 9. ¿Qué es un buen analizador de CSS C/C++?
- 10. ¿Qué es un buen tutorial para usar ORMLite con SQLite y Android?
- 11. ¿Qué es un buen simulador de Robótica?
- 12. Escribir un contenedor C++ para una biblioteca C
- 13. ¿Es esto aceptable OO Design
- 14. ¿Qué es un buen HTML5 Outliner?
- 15. ¿Qué es un buen GeoTiff Viewer?
- 16. ¿Qué es un buen juego de codificación?
- 17. ¿Este es un buen estilo de C#?
- 18. ¿Qué es un buen complemento SVN para Eclipse?
- 19. ¿Qué es un buen libro multihilo para Delphi?
- 20. ¿Qué es un buen compilador BASIC para Mac OSX?
- 21. ¿Qué es un buen Prolog IDE para Linux?
- 22. ¿Qué es un buen editor/visor hexadecimal para Mac?
- 23. ¿Qué es un buen sistema de plantillas para PHP?
- 24. ¿Qué es un buen entorno de desarrollo Ruby para Mac?
- 25. ¿Qué logging es un buen registro para su aplicación?
- 26. ¿Qué es un buen editor de texto para la nube?
- 27. ¿Qué es un buen sitio web para aprender prólogo?
- 28. ¿Qué es un buen Business Rule Engine (BRE) para .Net?
- 29. ¿Qué es un buen marco de botones CSS para Compass?
- 30. ¿Qué es un buen software wiki para programar tutoriales?
También revise la lista en: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers – User