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