(+34) 673 566 782 - (+34) 960 653 052 formacion@imaginagroup.com

Crear una aplicación con SQLite en iOS 6 (Parte 2)

iOS
Intermedio
30 minutos

En esta segunda parte del tutorial vamos a explicar cómo hacer inserciones, modificaciones y borrados de datos en nuestra base de datos de vehículos. Para ello, lo primero que vamos a hacer va a ser completar la clase VehiculoDAO añadiéndole los métodos necesarios para realizar el resto de operaciones. El código fuente a añadir es el siguiente:


VehiculoDAO.h
- (void) crearVehiculo: (NSString *)nombre ruedas:(NSInteger) ruedas;
- (void) actualizarVehiculo: (NSInteger) vehiculoID nombre:(NSString *)nombre ruedas:(NSInteger) ruedas;
- (void) borrarVehiculo: (NSInteger) vehiculoID;

VehiculoDAO.m
- (void) crearVehiculo:(NSString *)nombre ruedas:(NSInteger)ruedas{
NSString *ubicacionDB = [self obtenerRutaBD];

if(!(sqlite3_open([ubicacionDB UTF8String], &bd) == SQLITE_OK)){
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlInsert = [NSString stringWithFormat:@"INSERT INTO vehiculo (nombre_vehiculo, numero_ruedas) VALUES ('%@', %d)", nombre, ruedas];
const char *sql = [sqlInsert UTF8String];
sqlite3_stmt *sqlStatement;

if(sqlite3_prepare_v2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK){
NSLog(@"Problema al preparar el statement");
return;
} else {
if(sqlite3_step(sqlStatement) == SQLITE_DONE){
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}

}

}

- (void) actualizarVehiculo:(NSInteger) vehiculoID nombre:(NSString *)nombre ruedas:(NSInteger)ruedas{
NSString *ubicacionBD = [self obtenerRutaBD];

if(!(sqlite3_open([ubicacionBD UTF8String], &bd) == SQLITE_OK)){
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlUpdate = [NSString stringWithFormat:@"UPDATE vehiculo SET nombre_vehiculo = '%@', numero_ruedas = %d WHERE id = %d", nombre, ruedas, vehiculoID];
const char *sql = [sqlUpdate UTF8String];
sqlite3_stmt *sqlStatement;

if(sqlite3_prepare_v2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK){
NSLog(@"Problema al preparar el statement.");
return;
} else {
if(sqlite3_step(sqlStatement) == SQLITE_DONE){
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}
}
}

- (void) borrarVehiculo:(NSInteger) vehiculoID{
NSString *ubicacionBD = [self obtenerRutaBD];

if(!(sqlite3_open([ubicacionBD UTF8String], &bd) == SQLITE_OK)){
NSLog(@"No se puede conectar con la BD");
return;
} else {
NSString *sqlDelete = [NSString stringWithFormat:@"DELETE FROM vehiculo WHERE id = %d", vehiculoID];
const char *sql = [sqlDelete UTF8String];
sqlite3_stmt *sqlStatement;

if(sqlite3_prepare_v2(bd, sql, -1, &sqlStatement, NULL) != SQLITE_OK){
NSLog(@"Problema al preparar el statement.");
return;
} else {
if(sqlite3_step(sqlStatement) == SQLITE_DONE){
sqlite3_finalize(sqlStatement);
sqlite3_close(bd);
}
}
}
}


Como podemos ver, en estos métodos se hacen prácticamente los mismos pasos que en el método de consulta, lo único que cambia es qué sentencia SQL se lanza y el procesamiento final.

Ahora vamos a dirigirnos al storyboard y añadiremos un nuevo ViewController. A este ViewController le añadiremos dos UILabel, dos UITextField y un UIButton. El ViewController deberá quedar así:

Ahora vamos a crear una nueva clase en nuestro proyecto y la llamaremos AltaVehiculoViewController y se la asignamos en el storyboard a este nuevo ViewController. Una vez renombrada, definimos los IBOutlet necesarios y definimos el IBAction correspondiente al alta de un nuevo elemento. También definiremos un objeto de tipo VehiculoDAO, el cual nos permitirá conectar con la base de datos y lanzar las operaciones necesarias. En el método viewDidLoad inicializaremos el dao y ya estará listo para utilizarse. Ahora sólo queda programar el proceso de alta y éste es el código que nos permitirá hacerlo:




AltaVehiculoViewController.h
#import <UIKit/UIKit.h>
#import "VehiculoDAO.h"



@interface AltaVehiculoViewController : UIViewController{
IBOutlet UILabel *etqNombre;
IBOutlet UILabel *etqRuedas;
IBOutlet UITextField *txtNombre;
IBOutlet UITextField *txtRuedas;
IBOutlet UIButton *btnCrear;



VehiculoDAO *dao;
}



@property (nonatomic, strong) IBOutlet UILabel *etqNombre;
@property (nonatomic, strong) IBOutlet UILabel *etqRuedas;
@property (nonatomic, strong) IBOutlet UITextField *txtNombre;
@property (nonatomic, strong) IBOutlet UITextField *txtRuedas;
@property (nonatomic, strong) IBOutlet UIButton *btnCrear;
@property (nonatomic, strong) VehiculoDAO *dao;



- (IBAction) ocultarTeclado:(id)sender;
- (IBAction) crearNuevoVehiculo:(id)sender;



@end



AltaVehiculoViewController.m
@synthesize etqNombre;
@synthesize etqRuedas;
@synthesize txtNombre;
@synthesize txtRuedas;
@synthesize btnCrear;
@synthesize dao;



-(void) touchesBegan :(NSSet *) touches withEvent:(UIEvent *)event{
[txtNombre resignFirstResponder];
[txtRuedas resignFirstResponder];
[super touchesBegan:touches withEvent:event ];



}



- (void)viewDidLoad{
dao = [[VehiculoDAO alloc] init];
[txtRuedas setKeyboardType:UIKeyboardTypeNumberPad];
[super viewDidLoad];
}



- (IBAction)ocultarTeclado:(id)sender{



}



- (IBAction) crearNuevoVehiculo:(id)sender{
NSString *nombre = [NSString stringWithFormat:txtNombre.text];
NSInteger ruedas = [txtRuedas.text integerValue];



[dao crearVehiculo:nombre ruedas:ruedas];
}



Hacemos los enlaces correspondientes en el storyboard, acordándonos de asociar todos los métodos (incluido el de ocultar el teclado) y ya tendremos lista esta clase. Nos volvemos a ir al storyboard y en el TableViewController añadiremos un botón del tipo Bar Button Item en la barra de navegación. Uniremos este botón con el ViewController que acabamos de añadir mediante un segue de tipo Push. Para ello, seleccionamos el botón y, con la tecla Control apretada, arrastramos el ratón hacia el controller de destino. En el menú desplegable que aparece, seleccionamos Push y ya tendremos unidos el TableViewController y el ViewController de altas.

Ahora nos dirigimos al ViewController que utilizamos en la primera parte como detalle de datos y le añadiremos dos UIButton, uno para modificar y otro para borrar. También hemos de editar la clase ModVehiculoViewController para añadirle estos dos botones y los dos nuevos métodos, uno para borrar y otro para modificar un vehículo. Esto lo podemos ver en el siguiente código:


ModVehiculoViewController.h
@interface ModVehiculoViewController : UIViewController{
<CODIGO ANTERIOR>
IBOutlet UIButton *btnModificar;
IBOutlet UIButton *btnBorrar;
}

<CODIGO ANTERIOR>
@property (nonatomic, strong) IBOutlet UIButton *btnModificar;
@property (nonatomic, strong) IBOutlet UIButton *btnBorrar;

- (IBAction) modificarVehiculo:(id)sender;
- (IBAction) borrarVehiculo:(id)sender;

ModVehiculoViewController.m
@synthesize btnModificar;
@synthesize btnBorrar;

- (IBAction)modificarVehiculo:(id)sender{
NSInteger vehiculoID = vehiculo.vehiculoID;
NSString *nombre = txtNombre.text;
NSInteger numRuedas = [txtRuedas.text integerValue];

[dao actualizarVehiculo:vehiculoID nombre:nombre ruedas:numRuedas];
}

- (IBAction)borrarVehiculo:(id)sender{
NSInteger vehiculoID = vehiculo.vehiculoID;

[dao borrarVehiculo:vehiculoID];
}


Hacemos los enlaces correspondientes en el storyboard, incluyendo los actions que lanzará cada botón y con esto ya tendremos listo nuestro ViewController para modificar y borrar datos. Una vez hecho este montaje, el storyboard quedará así:

Una vez hechas todas estas acciones, ya tenemos lista nuestra aplicación para hacer altas, bajas, modificaciones y consultas contra una base de datos SQLite. Para aportar más información, podemos añadir una alerta cuando se haga cada operación que suponga persistencia sobre la base de datos. Sólo nos queda ejecutar el simulador para ver el resultado:

Infórmate sin compromiso

Nombre (requerido)

Correo electrónico (requerido)

Teléfono (requerido)

Modalidad (requerido)

  1. Responsable de los datos: IMAGINA WEB & MOBILE TECHNOLOGIES S.L.
  2. Finalidad de los datos: Responder a la información solicitada, envío de boletines de noticias y ofertas.
  3. Destinatarios: IMAGINA WEB & MOBILE TECHNOLOGIES S.L. No se cederán los datos a terceros.
  4. Derechos: En cualquier momento puedes acceder, recuperar y borrar tu información.

Uso de cookies: Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies