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

Duración:
20'
Nivel:
intermedio
Curso relacionado:
iOS 14

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.

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{

IBOutlet UIButton *btnModificar;IBOutlet UIButton *btnBorrar;}

@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 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.

Solicita información sobre iOS 14

En Imagina llevamos más de 13 años ofreciendo formación para empresas, estamos especializados en el área técnica y de ofimática, adaptando nuestras formaciones a vuestras necesidades. Déjanos tus datos, y nos pondremos en contacto contigo para informarte sobre el curso que mejor se ajuste a lo que buscas. Cuéntanos tus necesidades y podremos asesorarte sobre la modalidad que mejor se adapte: En directo, En directo a Medida u Online.

España