Como sabéis Infant, para almacenar los objetos aprendidos utilizará SQLite y siguiendo con los últimos posts de tutoriales hoy le toca el turno a la integración de SQLite en aplicaciones C\C++.
Abrir y cerrar la base de datos
En C\C++ una base de datos SQLite es manejada por el objeto sqlite3, que no es otra cosa que un puntero a la base de datos. Para abrir una base de datos cuya ruta es ruta_bd tan solo tenemos que llamar a la función sqlite3_open tal y como en el ejemplo siguiente:
Por otro lado analogamente para cerrar una base de datos tan solo hay que llamar a la función sqlite3_close como por ejemplo en:
Consultas de lectura
Una vez abierta la base de datos si queremos realizar una consulta deberemos trabajar con un puntero al objeto sqlite3_stmt y con las funciones sqlite3_prepare_v2 para preparar la consulta que se desea realizar y sqlite3_step para ejecutarla sobre la base de datos. Además y una vez terminadas las operaciones deberemos utilizar sqlite3_finalize que libera los recursos utilizados por sqlite3_stmt.
Por otro lado si queremos obtener los datos que obtenemos de una consulta debermos utilizar las siguentes funciones según el tipo de dato leido:
Un ejemplo con con todo ello es el siguinete:
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(this->MemoryDb,"SELECT * FROM things;",-1,&stmt,NULL) == SQLITE_OK)
{
while (sqlite3_step(stmt) == SQLITE_ROW) // Mientras que se reciban filas...
{
sqlite3_finalize(stmt);
return 0;
} else {
return -1;
}
Consultas de escritura y paso de parámetros
En el caso de querer insertar o actualizar datos en una tabla SQLite desde nuestra aplicación es que ahora a la consulta en SQL (con el signo ? donde irá el parametro) deberemos pasarle parámetros con los datos que queremos insertar o modificar. Para ello la API de SQLite dispone de una serie de funciones según el tipo de dato del parámetro:
sqlite3_stmt* stmt;
int id = 999;
string name = "Infant"
if (sqlite3_prepare_v2(MemoryDb, "INSERT INTO tags VALUES (?, ?);", -1,&stmt,NULL) == SQLITE_OK)
{
sqlite3_bind_int(stmt, 1, id); // Se añaden los parámetros.
sqlite3_bind_text(name.c_str(),-1,SQLITE_STATIC);
sqlite3_step(stmt); // se ejecuta
sqlite3_finalize(stmt); // y finaliza.
return 0;
}
else
{
return -1;
}
Abrir y cerrar la base de datos
En C\C++ una base de datos SQLite es manejada por el objeto sqlite3, que no es otra cosa que un puntero a la base de datos. Para abrir una base de datos cuya ruta es ruta_bd tan solo tenemos que llamar a la función sqlite3_open tal y como en el ejemplo siguiente:
sqlite3* MemoryDb;
...
if (sqlite3_open(ruta_bd, MemoryDb) != SQLITE_OK)
return -1;
} else {
return 0;
}
...
if (sqlite3_open(ruta_bd, MemoryDb) != SQLITE_OK)
return -1;
} else {
return 0;
}
Por otro lado analogamente para cerrar una base de datos tan solo hay que llamar a la función sqlite3_close como por ejemplo en:
if (sqlite3_close(this->MemoryDb) == SQLITE_OK)
return 0;
else
return -1;
return 0;
else
return -1;
Consultas de lectura
Una vez abierta la base de datos si queremos realizar una consulta deberemos trabajar con un puntero al objeto sqlite3_stmt y con las funciones sqlite3_prepare_v2 para preparar la consulta que se desea realizar y sqlite3_step para ejecutarla sobre la base de datos. Además y una vez terminadas las operaciones deberemos utilizar sqlite3_finalize que libera los recursos utilizados por sqlite3_stmt.
Por otro lado si queremos obtener los datos que obtenemos de una consulta debermos utilizar las siguentes funciones según el tipo de dato leido:
- sqlite3_column_blob
- sqlite3_column_bytes
- sqlite3_column_bytes16
- sqlite3_column_double
- sqlite3_column_int
- sqlite3_column_int64
- sqlite3_column_text
- sqlite3_column_text16
Un ejemplo con con todo ello es el siguinete:
sqlite3_stmt* stmt;
if (sqlite3_prepare_v2(this->MemoryDb,"SELECT * FROM things;",-1,&stmt,NULL) == SQLITE_OK)
{
while (sqlite3_step(stmt) == SQLITE_ROW) // Mientras que se reciban filas...
{
int ID = sqlite3_column_int(stmt, 0);
string Name = string(reinterpret_cast(sqlite3_column_text(stmt, 1)));
// Convertir desde unsigned const char* a string
double AvAng = sqlite3_column_double(stmt, 2);
cout ....
}string Name = string(reinterpret_cast
double AvAng = sqlite3_column_double(stmt, 2);
cout ....
sqlite3_finalize(stmt);
return 0;
} else {
return -1;
}
Consultas de escritura y paso de parámetros
En el caso de querer insertar o actualizar datos en una tabla SQLite desde nuestra aplicación es que ahora a la consulta en SQL (con el signo ? donde irá el parametro) deberemos pasarle parámetros con los datos que queremos insertar o modificar. Para ello la API de SQLite dispone de una serie de funciones según el tipo de dato del parámetro:
- sqlite3_bind_blob
- sqlite3_bind_double
- sqlite3_bind_int
- sqlite3_bind_int64
- sqlite3_bind_null
- sqlite3_bind_text
- sqlite3_bind_text16
- sqlite3_bind_zeroblob
sqlite3_stmt* stmt;
int id = 999;
string name = "Infant"
if (sqlite3_prepare_v2(MemoryDb, "INSERT INTO tags VALUES (?, ?);", -1,&stmt,NULL) == SQLITE_OK)
{
sqlite3_bind_int(stmt, 1, id); // Se añaden los parámetros.
sqlite3_bind_text(name.c_str(),-1,SQLITE_STATIC);
sqlite3_step(stmt); // se ejecuta
sqlite3_finalize(stmt); // y finaliza.
return 0;
}
else
{
return -1;
}
Para más información no dudeis en conslutar la API de SQLite y los tutoriales de la página web.
hola ya puedo abrir almacenar una linea de datos ejemplo:
ResponderEliminarsentencia ="insert into hosts (Month, Name) values ('January', 'January_2011.db');";
msg = qlite3_exec(db,sentencia.c_str(),NULL,NULL,&error);
el problema es que no se como realizar mas columnas. me podrias ayudar porfavor.mi correo es tony8a87@hotmail.com