· 6 years ago · Jul 04, 2019, 09:04 AM
1import UIKit
2import SQLite3
3
4class ViewController: UIViewController{
5private var db: OpaquePointer?
6private var dbName: String = "Datos.sqlite"
7private var usuarios = [Usuario]()
8private var conexion = ConexionDB()
9
10
11@IBOutlet weak var usuario: UITextField!
12@IBOutlet weak var contrasenia: UITextField!
13
14
15@IBOutlet weak var alerta: UILabel!
16@IBOutlet weak var alerta2: UILabel!
17
18override func viewDidLoad() {
19 super.viewDidLoad()
20
21
22 DispatchQueue.global(qos: .background).async {//hilo de fonde
23 print("Esto se ejecuta en la cola de fondo")
24 self.conexion.conectarDB()
25
26 DispatchQueue.main.async {//hilo principal
27 print("Esto se ejecuta en la cola principal, después del código anterior en el bloque externo")
28
29 //Creación de ADMIN en caso de no existir al menos un usuario----------------------------------------------
30 if self.usuarios.count == 0
31 {
32 self.conexion.insertarUsuario(usu: "admin", pass: "admin", tipo: "A",nom: "Administrador",apell: "Administrador",fec_nac: "16/10/1996",email: "admin@admin.admin",sexo: "poco")
33 self.conexion.insertarUsuario(usu: "vu", pass: "vu", tipo: "U",nom: "Vista Usario",apell: "Vista Usario",fec_nac: "16/10/1996",email: "vu@vu.vu",sexo: "poco")
34 if self.usuarios.count == 2
35 {
36 print("ADMIN insertado al loguear")
37 }else if self.usuarios.count == 0
38 {
39 print("ADMIN no se ha podido insertar al loguearse")
40 }
41 }
42
43 for usu in self.usuarios
44 {
45 print("usu: "+usu.usuario)
46 print("pass: "+usu.contrasenia)
47 print("tipo: "+usu.tipo)
48 }
49 print("fin :"+String(self.usuarios.count))
50
51 }//fin hilo de principal
52 }//fin del hilo de fondo
53
54}
55
56import Foundation
57import SQLite3
58
59internal class ConexionDB {
60
61var db: OpaquePointer?
62var usuarios = [Usuario]()
63private var dbName: String = "Datos.sqlite"
64
65
66internal func conectarDB()
67{
68 //INDICAMOS DONDE SE GUARDARA LA BASE DE DATOS Y EL NOMBRE DE ESTAS
69 let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
70 .appendingPathComponent("Datos.sqlite")
71 //INDICAMOS SI DIERA ALGUN FALLO AL CONECTARSE
72 if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
73 print("error al abrir la base de datos")
74 }
75 else {//SI PODEMOS CONECTARNOS A LA BASE DE DATOS CREAREMOS LA ESTRUCTURA DE ESTA, SI NO EXISTIERA NO SE HARIA NADA
76 print("base abierta")
77 //if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Usuarios (usuario TEXT PRIMARY KEY, contrasenia TEXT, tipo TEXT, nombre TEXT)", nil, nil, nil) != SQLITE_OK {
78 if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Usuarios (usuario TEXT PRIMARY KEY, contrasenia TEXT, tipo TEXT, nombre TEXT, apellidos TEXT, fec_nac TEXT, email TEXT,sexo TEXT);COMMIT;", nil, nil, nil) != SQLITE_OK {
79 //if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Usuarios (usuario TEXT PRIMARY KEY, contrasenia TEXT, tipo TEXT, nombre TEXT, apellidos TEXT, fec_nac TEXT, email TEXT,sexo TEXT); CREATE TABLE IF NOT EXISTS Movimientos (num_reg TEXT PRIMARY KEY, FOREIGN KEY(usuario) REFERENCES Usuarios(usuario), fecha TEXT, importe REAL, tipo BOOLEAN);", nil, nil, nil) != SQLITE_OK {
80 let errmsg = String(cString: sqlite3_errmsg(db)!)
81 print("error creating table: (errmsg)")
82 }
83 }
84 print("BD creada")
85 self.crearObjUsuario()
86 print("Usuarios creados")
87 if usuarios.count == 0
88 {
89 self.insertarUsuario(usu: "admin", pass: "admin", tipo: "A",nom: "Administrador",apell: "Administrador",fec_nac: "16/10/1996",email: "admin@admin.admin",sexo: "poco")
90 print("ADMIN insertado.")
91 }
92
93}
94
95internal func conectarDB(nombreDB: String)
96{
97 //INDICAMOS DONDE SE GUARDARA LA BASE DE DATOS Y EL NOMBRE DE ESTAS
98 let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
99 .appendingPathComponent(nombreDB)
100 //INDICAMOS SI DIERA ALGUN FALLO AL CONECTARSE
101 if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
102 print("error al abrir la base de datos")
103 }
104 else {//SI PODEMOS CONECTARNOS A LA BASE DE DATOS CREAREMOS LA ESTRUCTURA DE ESTA, SI NO EXISTIERA NO SE HARIA NADA
105 print("base abierta")
106 //if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Usuarios (usuario TEXT PRIMARY KEY, contrasenia TEXT, tipo TEXT, nombre TEXT)", nil, nil, nil) != SQLITE_OK {
107 if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Usuarios (usuario TEXT PRIMARY KEY, contrasenia TEXT, tipo TEXT, nombre TEXT, apellidos TEXT, fec_nac TEXT, email TEXT,sexo TEXT);COMMIT;", nil, nil, nil) != SQLITE_OK {
108 //if sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS Usuarios (usuario TEXT PRIMARY KEY, contrasenia TEXT, tipo TEXT, nombre TEXT, apellidos TEXT, fec_nac TEXT, email TEXT,sexo TEXT); CREATE TABLE IF NOT EXISTS Movimientos (num_reg TEXT PRIMARY KEY, FOREIGN KEY(usuario) REFERENCES Usuarios(usuario), fecha TEXT, importe REAL, tipo BOOLEAN);", nil, nil, nil) != SQLITE_OK {
109 let errmsg = String(cString: sqlite3_errmsg(db)!)
110 print("error creating table: (errmsg)")
111 }
112 }
113 print("BD creada")
114 self.crearObjUsuario()
115 print("Usuarios creados")
116 if usuarios.count == 0
117 {
118 self.insertarUsuario(usu: "admin", pass: "admin", tipo: "A",nom: "Administrador",apell: "Administrador",fec_nac: "16/10/1996",email: "admin@admin.admin",sexo: "poco")
119 print("ADMIN insertado.")
120 }
121
122}
123
124
125
126internal func crearObjUsuario(){
127
128
129 //GUARDAMOS NUESTRA CONSULTA
130 let queryString = "SELECT * FROM Usuarios;"
131
132 //PUNTERO DE INSTRUCCIÓN
133 var stmt:OpaquePointer?
134
135 //PREPARACIÓN DE LA CONSULTA
136 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
137 let errmsg = String(cString: sqlite3_errmsg(db)!)
138 print("error preparing insert: (errmsg)")
139 return
140 }
141
142 //RECORREMOS LOS REGISTROS
143 while(sqlite3_step(stmt) == SQLITE_ROW){
144 print("illo")
145 let usuario = String(cString: sqlite3_column_text(stmt, 0))
146 let contrasenia = String(cString: sqlite3_column_text(stmt, 1))
147 let tipo = String(cString: sqlite3_column_text(stmt, 2))
148 let nombre = String(cString: sqlite3_column_text(stmt, 3))
149 let apellidos = String(cString: sqlite3_column_text(stmt, 4))
150 let fec_nac = String(cString: sqlite3_column_text(stmt, 5))
151 let email = String(cString: sqlite3_column_text(stmt, 6))
152 let sexo = String(cString: sqlite3_column_text(stmt, 7))
153 print("illo2")
154 //AÑADIMOS LOS VALORES A LA LISTA
155 self.usuarios.append(Usuario(
156 usuario: String(describing: usuario),
157 contrasenia: String(describing: contrasenia),
158 tipo:String(describing: tipo)
159 ,nombre:String(describing: nombre)
160 ,apellidos:String(describing: apellidos)
161 ,fec_nac:String(describing: fec_nac)
162 ,email:String(describing: email)
163 ,sexo:String(describing: sexo)
164
165 ))
166 }
167 print("siiiiiiiiii")
168}
169
170internal func insertarUsuario(usu:String,pass:String, tipo: String, nom: String,apell: String, fec_nac: String,email: String, sexo: String) {
171 //CREAMOS EL PUNTERO DE INSTRUCCIÓN
172 var stmt: OpaquePointer?
173
174 //CREAMOS NUESTRA SENTENCIA
175 let queryString = "INSERT INTO Usuarios(usuario, contrasenia, tipo, nombre, apellidos, fec_nac, email, sexo) VALUES ('"+usu+"','"+pass+"','"+tipo+"','"+nom+"','"+apell+"','"+fec_nac+"','"+email+"','"+sexo+"');commit;"
176 //PREPARAMOS LA SENTENCIA
177 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
178 let errmsg = String(cString: sqlite3_errmsg(db)!)
179 print(queryString)
180 print("error preparing insert: (errmsg)")
181 return
182 }
183
184
185 //EJECUTAMOS LA SENTENCIA PARA INSERTAR LOS VALORES
186 if sqlite3_step(stmt) != SQLITE_DONE {
187 let errmsg = String(cString: sqlite3_errmsg(db)!)
188 print("fallo al insertar en usuarios: (errmsg)")
189 //nurvc.alerta2.isHidden = true
190 //nurvc.alerta3.isHidden = true
191 //nurvc.alerta.isHidden = false
192 return
193 }
194
195 //FINALIZAMOS LA SENTENCIA
196 sqlite3_finalize(stmt)
197 print("Insertado")
198 //displaying a success message
199 print("Usuario saved successfully")
200
201}
202
203internal func eliminarUsuarios()
204{
205 //GUARDAMOS NUESTRA CONSULTA
206 let queryString = "DELETE FROM Usuarios;COMMIT;"
207 //CREAMOS EL PUNTERO DE INSTRUCCIÓN
208 var deleteStatement: OpaquePointer? = nil
209
210 //PREPARACIÓN DE LA CONSULTA
211 if sqlite3_prepare(db, queryString, -1, &deleteStatement, nil) != SQLITE_OK{
212 let errmsg = String(cString: sqlite3_errmsg(db)!)
213 print(queryString)
214 print("error preparing insert: (errmsg)")
215 return
216 }
217 //ELIMINAMOS LOS REGISTROS
218 if sqlite3_prepare_v2(db, queryString, -1, &deleteStatement, nil) == SQLITE_OK {
219 if sqlite3_step(deleteStatement) == SQLITE_DONE {
220 print("Successfully deleted row.")
221 } else {
222 print("Could not delete row.")
223 }
224 } else {
225 print("DELETE statement could not be prepared")
226 }
227
228 //FINALIZAMOS LA SENTENCIA
229 sqlite3_finalize(deleteStatement)
230 //insertarAdmin()
231}
232
233internal func eliminarUsuario(usu: String)
234{
235 //GUARDAMOS NUESTRA CONSULTA
236 let queryString = "DELETE FROM Usuarios WHERE usuario ='"+usu+"';COMMIT;"
237 //CREAMOS EL PUNTERO DE INSTRUCCIÓN
238 var deleteStatement: OpaquePointer? = nil
239
240 //PREPARACIÓN DE LA CONSULTA
241 if sqlite3_prepare(db, queryString, -1, &deleteStatement, nil) != SQLITE_OK{
242 let errmsg = String(cString: sqlite3_errmsg(db)!)
243 print(queryString)
244 print("error preparing insert: (errmsg)")
245 return
246 }
247 //ELIMINAMOS LOS REGISTROS
248 if sqlite3_prepare_v2(db, queryString, -1, &deleteStatement, nil) == SQLITE_OK {
249 if sqlite3_step(deleteStatement) == SQLITE_DONE {
250 print("Successfully deleted row.")
251 } else {
252 print("Could not delete row.")
253 }
254 } else {
255 print("DELETE statement could not be prepared")
256 }
257
258 //FINALIZAMOS LA SENTENCIA
259 sqlite3_finalize(deleteStatement)
260 //insertarAdmin()
261}