· 6 years ago · Jul 04, 2019, 12:14 AM
1// ConexionDB.swift
2// TFG
3//
4// Created by Daniel Queraltó Parra on 22/03/2019.
5// Copyright © 2019 Daniel Queraltó Parra. All rights reserved.
6//
7
8import Foundation
9import SQLite3
10
11internal class ConexionDB {
12
13 private var db: OpaquePointer?
14 private var usuarios = [Usuario]()
15 private var dbName: String = "Datos.sqlite"
16
17 private var sentAddTabUsu: String = "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;"
18 private var sentDelUsu: String = "DELETE FROM Usuarios WHERE usuario ='"
19 private var sentDelAllUsu: String = "DELETE FROM Usuarios;COMMIT;"
20 private var sentInsertUsu: String = "INSERT INTO Usuarios(usuario, contrasenia, tipo, nombre, apellidos, fec_nac, email, sexo) VALUES ('"
21
22
23
24
25internal func conectarDB()
26
27 {
28 //INDICAMOS DONDE SE GUARDARA LA BASE DE DATOS Y EL NOMBRE DE ESTAS
29 let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
30 .appendingPathComponent(dbName)
31 //INDICAMOS SI DIERA ALGUN FALLO AL CONECTARSE
32 if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
33 print("error al abrir la base de datos")
34 }
35 else {//SI PODEMOS CONECTARNOS A LA BASE DE DATOS CREAREMOS LA ESTRUCTURA DE ESTA, SI NO EXISTIERA NO SE HARIA NADA
36 print("base abierta")
37 //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 {
38 if sqlite3_exec(db, sentAddTabUsu, nil, nil, nil) != SQLITE_OK {
39 //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 {
40 let errmsg = String(cString: sqlite3_errmsg(db)!)
41 print("error creating table: (errmsg)")
42 }
43 }
44 print("BD creada")
45 self.crearObjUsuario()
46 print("Usuarios creados")
47 if usuarios.count == 0
48 {
49 self.insertarUsuario(usu: "admin", pass: "admin", tipo: "A",nom: "Administrador",apell: "Administrador",fec_nac: "16/10/1996",email: "admin@admin.admin",sexo: "poco")
50 print("ADMIN insertado.")
51 }
52
53 }
54
55 internal func conectarDB(nombreDB: String)
56 {
57 //INDICAMOS DONDE SE GUARDARA LA BASE DE DATOS Y EL NOMBRE DE ESTAS
58 let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
59 .appendingPathComponent(nombreDB)
60 //INDICAMOS SI DIERA ALGUN FALLO AL CONECTARSE
61 if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
62 print("error al abrir la base de datos")
63 }
64 else {//SI PODEMOS CONECTARNOS A LA BASE DE DATOS CREAREMOS LA ESTRUCTURA DE ESTA, SI NO EXISTIERA NO SE HARIA NADA
65 print("base abierta")
66 //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 {
67 if sqlite3_exec(db, sentAddTabUsu, nil, nil, nil) != SQLITE_OK {
68 //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 {
69 let errmsg = String(cString: sqlite3_errmsg(db)!)
70 print("error creating table: (errmsg)")
71 }
72 }
73 print("BD creada")
74 self.crearObjUsuario()
75 print("Usuarios creados")
76 if usuarios.count == 0
77 {
78 self.insertarUsuario(usu: "admin", pass: "admin", tipo: "A",nom: "Administrador",apell: "Administrador",fec_nac: "16/10/1996",email: "admin@admin.admin",sexo: "poco")
79 print("ADMIN insertado.")
80 }
81
82 }
83
84
85
86 internal func crearObjUsuario(){
87
88
89 //GUARDAMOS NUESTRA CONSULTA
90 let queryString = "SELECT * FROM Usuarios;"
91
92 //PUNTERO DE INSTRUCCIÓN
93 var stmt:OpaquePointer?
94
95 //PREPARACIÓN DE LA CONSULTA
96 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
97 let errmsg = String(cString: sqlite3_errmsg(db)!)
98 print("error preparing insert: (errmsg)")
99 return
100 }
101
102 //RECORREMOS LOS REGISTROS
103 while(sqlite3_step(stmt) == SQLITE_ROW){
104 print("illo")
105 let usuario = String(cString: sqlite3_column_text(stmt, 0))
106 let contrasenia = String(cString: sqlite3_column_text(stmt, 1))
107 let tipo = String(cString: sqlite3_column_text(stmt, 2))
108 let nombre = String(cString: sqlite3_column_text(stmt, 3))
109 let apellidos = String(cString: sqlite3_column_text(stmt, 4))
110 let fec_nac = String(cString: sqlite3_column_text(stmt, 5))
111 let email = String(cString: sqlite3_column_text(stmt, 6))
112 let sexo = String(cString: sqlite3_column_text(stmt, 7))
113 print("illo2")
114 //AÑADIMOS LOS VALORES A LA LISTA
115 self.usuarios.append(Usuario(
116 usuario: String(describing: usuario),
117 contrasenia: String(describing: contrasenia),
118 tipo:String(describing: tipo)
119 ,nombre:String(describing: nombre)
120 ,apellidos:String(describing: apellidos)
121 ,fec_nac:String(describing: fec_nac)
122 ,email:String(describing: email)
123 ,sexo:String(describing: sexo)
124
125 ))
126 }
127 print("siiiiiiiiii")
128 }
129
130 internal func insertarUsuario(usu:String,pass:String, tipo: String, nom: String,apell: String, fec_nac: String,email: String, sexo: String) {
131 //CREAMOS EL PUNTERO DE INSTRUCCIÓN
132 var stmt: OpaquePointer?
133
134 //CREAMOS NUESTRA SENTENCIA
135 let queryString = sentInsertUsu+usu+"','"+pass+"','"+tipo+"','"+nom+"','"+apell+"','"+fec_nac+"','"+email+"','"+sexo+"');commit;"
136 //PREPARAMOS LA SENTENCIA
137 if sqlite3_prepare(db, queryString, -1, &stmt, nil) != SQLITE_OK{
138 let errmsg = String(cString: sqlite3_errmsg(db)!)
139 print(queryString)
140 print("error preparing insert: (errmsg)")
141 return
142 }
143
144
145 //EJECUTAMOS LA SENTENCIA PARA INSERTAR LOS VALORES
146 if sqlite3_step(stmt) != SQLITE_DONE {
147 let errmsg = String(cString: sqlite3_errmsg(db)!)
148 print("fallo al insertar en usuarios: (errmsg)")
149 //nurvc.alerta2.isHidden = true
150 //nurvc.alerta3.isHidden = true
151 //nurvc.alerta.isHidden = false
152 return
153 }
154
155 //FINALIZAMOS LA SENTENCIA
156 sqlite3_finalize(stmt)
157 print("Insertado")
158 //displaying a success message
159 print("Usuario saved successfully")
160
161 }
162
163 internal func eliminarUsuarios()
164 {
165 //GUARDAMOS NUESTRA CONSULTA
166 let queryString = sentDelAllUsu
167 //CREAMOS EL PUNTERO DE INSTRUCCIÓN
168 var deleteStatement: OpaquePointer? = nil
169
170 //PREPARACIÓN DE LA CONSULTA
171 if sqlite3_prepare(db, queryString, -1, &deleteStatement, nil) != SQLITE_OK{
172 let errmsg = String(cString: sqlite3_errmsg(db)!)
173 print(queryString)
174 print("error preparing insert: (errmsg)")
175 return
176 }
177 //ELIMINAMOS LOS REGISTROS
178 if sqlite3_prepare_v2(db, queryString, -1, &deleteStatement, nil) == SQLITE_OK {
179 if sqlite3_step(deleteStatement) == SQLITE_DONE {
180 print("Successfully deleted row.")
181 } else {
182 print("Could not delete row.")
183 }
184 } else {
185 print("DELETE statement could not be prepared")
186 }
187
188 //FINALIZAMOS LA SENTENCIA
189 sqlite3_finalize(deleteStatement)
190 //insertarAdmin()
191 }
192
193 internal func eliminarUsuario(usu: String)
194 {
195 //GUARDAMOS NUESTRA CONSULTA
196 let queryString = sentDelUsu+usu+"';COMMIT;"
197 //CREAMOS EL PUNTERO DE INSTRUCCIÓN
198 var deleteStatement: OpaquePointer? = nil
199
200 //PREPARACIÓN DE LA CONSULTA
201 if sqlite3_prepare(db, queryString, -1, &deleteStatement, nil) != SQLITE_OK{
202 let errmsg = String(cString: sqlite3_errmsg(db)!)
203 print(queryString)
204 print("error preparing insert: (errmsg)")
205 return
206 }
207 //ELIMINAMOS LOS REGISTROS
208 if sqlite3_prepare_v2(db, queryString, -1, &deleteStatement, nil) == SQLITE_OK {
209 if sqlite3_step(deleteStatement) == SQLITE_DONE {
210 print("Successfully deleted row.")
211 } else {
212 print("Could not delete row.")
213 }
214 } else {
215 print("DELETE statement could not be prepared")
216 }
217
218 //FINALIZAMOS LA SENTENCIA
219 sqlite3_finalize(deleteStatement)
220 //insertarAdmin()
221 }
222
223}