Estoy pensando en usar SQLite como base de datos para una aplicación de C++ que estoy escribiendo. He leído los documentos pertinentes tanto en el sitio trolltech como en sqlite, pero la información parece un tanto inconexa, no hay un fragmento simple que muestre un ejemplo completo de CRUD.Uso de SQLite con Qt
Quiero escribir un conjunto de funciones de ayuda para permitirme ejecutar acciones CRUD en SQLite fácilmente, desde mi aplicación.
El siguiente smippet es un seudocódigo para las funciones de ayuda que preveo escribir. Agradecería las sugerencias sobre cómo "llenar" las funciones de código auxiliar. Una cosa que es particularmente frustrante es que no hay una mención clara en ninguno de los documentos, en la relación entre una consulta y la base de datos en la que se está ejecutando la consulta, lo que sugiere algún tipo de conexión/tabla por defecto.
En mi aplicación, necesito poder especificar explícitamente la base de datos en la que se ejecutan las consultas, por lo que sería útil si alguna respuesta explica cómo especificar explícitamente la base de datos/tabla involucrada en una consulta (u otra base de datos acción para ese asunto).
Mi pseudocódigo sigue a continuación:
#include <boost/shared_ptr.hh>
typedef boost::shared_ptr<QSqlDatabase> dbPtr;
dbPtr createConnection(const QString& conn_type = "QSQLITE", const QString& dbname = ":memory:")
{
dbPtr db (new QSQlDatabase::QSqlDatabase());
if (db.get())
{
db->addDatabase(conn_type);
db->setDatabaseName(dbname);
if (!db.get()->open)
db.reset();
}
return db;
}
bool runQuery(const Qstring& sql)
{
//How does SQLite know which database to run this SQL statement against ?
//How to iterate over the results of the run query?
}
bool runPreparedStmtQuery(const QString query_name, const QString& params)
{
//How does SQLite know which database to run this SQL statement against ?
//How do I pass parameters (say a comma delimited list to a prepared statement ?
//How to iterate over the results of the run query?
}
bool doBulkInsertWithTran(const Qstring& tablename, const MyDataRows& rows)
{
//How does SQLite know which database to run this SQL statement against ?
//How to start/commit|rollback
}
En caso de que lo que estoy pidiendo no es clara, estoy pidiendo lo que sería el wat correcta para aplicar cada una de las funciones anteriores (posiblemente con la excepción de la primero, a menos que se pueda mejorar, por supuesto).
[Editar]
pregunta clarificada mediante la eliminación de requisito de especificar explícitamente una tabla (esto ya se realiza en la consulta SQL - Se me olvidó Gracias por señalarlo Tom
descubrí que también puedes ejecutivo clall() directamente en el objeto QSqlDatabase, para ejecutar una consulta. Por supuesto, esto solo se puede usar cuando no se ejecutan declaraciones preparadas. Sigue leyendo sobre declaraciones preparadas. –
¿Qué tal las declaraciones preparadas ...? –