/ManejadorBD/src/es/auto/DBManager/DBManager.java
Java | 335 lines | 264 code | 52 blank | 19 comment | 19 complexity | 69d315d982853cee200bb4aad1b1b708 MD5 | raw file
- package es.auto.DBManager;
-
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.image.BufferedImage;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.Iterator;
- import java.util.List;
- import java.util.StringTokenizer;
-
- import javax.imageio.ImageIO;
- import javax.swing.ImageIcon;
-
- import es.auto.cipher.CipherManager;
- import es.auto.data.Permiso;
- import es.auto.data.Pregunta;
- import es.auto.data.Test;
-
- public class DBManager{
- private Connection conn;
- private Statement stat;
-
- public DBManager() throws ClassNotFoundException{
- Class.forName("org.sqlite.JDBC");
- }
-
- public void connect(String dbName) throws SQLException{
- File f = new File(dbName);
- if (f.exists()){
- System.out.println("Base de datos ya existente: se procede a borrarla y crear una nueva...");
- f.delete();
- }
- conn = DriverManager.getConnection("jdbc:sqlite:"+dbName);
- stat = conn.createStatement();
- }
-
- public void disconnect() throws SQLException{
- conn.close();
- }
-
- public void createTables() throws SQLException {
-
- stat.execute("CREATE TABLE \"auto_user\" ("+
- "\"user_id\" integer NOT NULL PRIMARY KEY,"+
- "\"nombre\" varchar(30) NOT NULL,"+
- "\"fecha\" date DEFAULT CURRENT_DATE NOT NULL);");
-
- stat.execute("CREATE TABLE \"auto_permiso\" ("+
- "\"permiso_id\" integer NOT NULL PRIMARY KEY,"+
- "\"nombre\" varchar(30) NOT NULL,"+
- "\"descripcion\" text NOT NULL,"+
- "\"fecha\" date DEFAULT CURRENT_DATE NOT NULL);");
-
- stat.execute("CREATE TABLE \"auto_test\" ("+
- "\"test_id\" integer NOT NULL PRIMARY KEY,"+
- "\"test_num\" integer NOT NULL,"+
- "\"permiso_id\" integer NOT NULL REFERENCES \"auto_permiso\" (\"permiso_id\"),"+
- "\"creador_id\" integer NOT NULL REFERENCES \"auto_user\" (\"user_id\"),"+
- "\"fecha\" date DEFAULT CURRENT_DATE NOT NULL,"+
- "UNIQUE(test_num,permiso_id));");
-
- stat.execute("CREATE TABLE \"auto_pregunta\" ("+
- "\"pregunta_id\" integer NOT NULL PRIMARY KEY,"+
- "\"numero\" integer NOT NULL,"+
- "\"test_id\" integer NOT NULL REFERENCES \"auto_test\" (\"test_id\"),"+
- "\"texto\" text NOT NULL,"+
- "\"fecha\" date DEFAULT CURRENT_DATE NOT NULL,"+
- "\"imagen\" BLOB NOT NULL,"+
- "UNIQUE(\"numero\",\"test_id\"));");
-
- stat.execute("CREATE TABLE \"auto_respuesta\" ("+
- "\"respuesta_id\" integer NOT NULL PRIMARY KEY,"+
- "\"orden\" integer NOT NULL,"+
- "\"pregunta_id\" integer NOT NULL REFERENCES \"auto_pregunta\" (\"pregunta_id\"),"+
- "\"texto\" text NOT NULL,"+
- "\"correcta\" bool NOT NULL DEFAULT false,"+
- "\"fecha\" date DEFAULT CURRENT_DATE NOT NULL,"+
- "UNIQUE(orden,pregunta_id));");
- }
-
-
- public void insertUsuarios() throws SQLException{
- stat.executeUpdate("insert into auto_user (user_id,nombre,fecha) values (1, 'root', CURRENT_DATE);");
- }
-
- public void insertPermisos() throws SQLException{
- //strftime(\"%d/%m/%Y\",'now','localtime')
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (1, '"+Permiso.TipoPermiso.AM+"', 'Permiso AM');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (2, '"+Permiso.TipoPermiso.A1+"', 'Permiso A1');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (3, '"+Permiso.TipoPermiso.A2+"', 'Permiso A2');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (4, '"+Permiso.TipoPermiso.A+"', 'Permiso A');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (5, '"+Permiso.TipoPermiso.B+"', 'Permiso B');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (6, '"+Permiso.TipoPermiso.BE+"', 'Permiso BE');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (7, '"+Permiso.TipoPermiso.C1+"', 'Permiso C1');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (8, '"+Permiso.TipoPermiso.C1E+"', 'Permiso C1E');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (9, '"+Permiso.TipoPermiso.C+"', 'Permiso C');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (10, '"+Permiso.TipoPermiso.CE+"', 'Permiso CE');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (11, '"+Permiso.TipoPermiso.D1+"', 'Permiso D1');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (12, '"+Permiso.TipoPermiso.D1E+"', 'Permiso D1E');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (13, '"+Permiso.TipoPermiso.D+"', 'Permiso D');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (14, '"+Permiso.TipoPermiso.DE+"', 'Permiso DE');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (15, '"+Permiso.TipoPermiso.E+"', 'Permiso E');");
- stat.executeUpdate("insert into auto_permiso (permiso_id,nombre,descripcion) values (16, '"+Permiso.TipoPermiso.BTP+"', 'Permiso BTP');");
- }
-
- /**
- * Inserta en la BD la información de todos los TESTS proveniente de la lista con todos los Permisos
- * @param listaPermisos Lista de permisos, los cuales contienen cada uno una lista de TESTs
- * @throws SQLException
- */
- public void insertTests(List<Permiso> listaPermisos) throws SQLException{
- int testID=1;
- Permiso p;
- StringTokenizer idPermiso;
- Iterator<Integer> iteradorConjuntoDeTests;
- Integer numTest;
-
- Iterator<Permiso> iter = listaPermisos.iterator();
- while (iter.hasNext()){ // Para cada permiso
- p = iter.next();
- iteradorConjuntoDeTests = p.getTests().keySet().iterator();
- while (iteradorConjuntoDeTests.hasNext()){ // Para cada test del permiso p
- numTest = iteradorConjuntoDeTests.next();
- idPermiso = new StringTokenizer(getSelectResult("auto_permiso", "UPPER(nombre)='"+p.getPermiso()+"'"));
- stat.executeUpdate("insert into auto_test (test_id,test_num,permiso_id,creador_id) values ("+testID+","+p.getTests().get(numTest).getNumeroDeTest()+","+idPermiso.nextToken()+", 1);");
- testID++;
- }
- }
- }
-
- public void insertPreguntasYrespuestas(List<Permiso> listaPermisos, boolean cifrar) throws SQLException{
- String letras = "ABC";
- int preguntaID=1, respuestaID=1;
- int preguntaOrden=1, respuestaOrden=1;
- Permiso permiso;
- Test test;
- Pregunta pregunta;
- Iterator<Integer> iteradorConjuntoDeTests,iteradorConjuntoDePreguntas;
- String idTest;
- byte[] foto;
- String lineaTemporal = null;
-
- Iterator<Permiso> iter = listaPermisos.iterator();
- while (iter.hasNext()){ // Para cada permiso
- permiso = iter.next(); //Obtengo el permiso
-
- iteradorConjuntoDeTests = permiso.getTests().keySet().iterator();
- while (iteradorConjuntoDeTests.hasNext()){ // Para cada test del permiso p
- test = permiso.getTests().get(iteradorConjuntoDeTests.next()); // Obtengo el test
-
- preguntaOrden=1;
- iteradorConjuntoDePreguntas = test.getPreguntas().keySet().iterator();
- while (iteradorConjuntoDePreguntas.hasNext()){ // Para cada pregunta del test t del permiso p
- pregunta = test.getPreguntas().get(iteradorConjuntoDePreguntas.next()); // Obtengo la pregunta
-
- // Obtener el id del Test
- ResultSet rs = stat.executeQuery("select T.test_id from auto_permiso P, auto_test T where (T.permiso_id=P.permiso_id) AND (P.nombre='"+permiso.getPermiso().toString()+"') AND (T.test_num="+test.getNumeroDeTest()+")");
- idTest = (rsToString(rs));
- rs.close();
-
- //Obtener foto
- foto = getImageAsByteArray(toBufferedImage(loadImageFromPath(pregunta.getFotoPath())));
-
- if (cifrar){
- lineaTemporal = CipherManager.getEncodedWithMD5(pregunta.getPregunta());
- }else{
- lineaTemporal = pregunta.getPregunta();
- }
-
- //System.out.println("Permiso: "+permiso.getPermiso()+" Test: "+test.getNumeroDeTest()+" -> insert into auto_pregunta (id,orden,test_id,texto) values ("+preguntaID+","+preguntaOrden+","+idTest+",'"+lineaTemporal+"');");
- PreparedStatement ps = conn.prepareStatement("insert into auto_pregunta (pregunta_id,numero,test_id,texto,imagen) values ("+preguntaID+","+preguntaOrden+","+idTest+",'"+lineaTemporal+"',?);");
- ps.setBytes(1, foto);
- ps.executeUpdate();
- ps.close();
-
- respuestaOrden=1;
- for( char c = letras.charAt(0); c<= letras.charAt(pregunta.getRespuestas().size()-1); c++){ // Para cada respuesta que exista
- if (cifrar){
- lineaTemporal = CipherManager.getEncodedWithMD5(pregunta.getRespuestas().get(c));
- }else{
- lineaTemporal = pregunta.getRespuestas().get(c);
- }
-
- //System.out.println("insert into auto_respuesta (id,orden,pregunta_id,texto,correcta) values ("+respuestaID+","+respuestaOrden+","+preguntaID+",'"+lineaTemporal+"','"+new Integer(respuestaOrden).equals(letras.indexOf(pregunta.getCorrecta()))+"');");
- stat.executeUpdate("insert into auto_respuesta (respuesta_id,orden,pregunta_id,texto,correcta) values ("+respuestaID+","+respuestaOrden+","+preguntaID+",'"+lineaTemporal+"','"+new Integer(respuestaOrden).equals(letras.indexOf(pregunta.getCorrecta()))+"');");
- respuestaID++;
- respuestaOrden++;
- }
-
- preguntaID++;
- preguntaOrden++;
- }
-
- }
- }
- }
-
- public String getSelectResult(String tablename, String whereCondition) throws SQLException{
- String out = "";
- ResultSet rs = null;
-
- if (whereCondition==null){
- rs = stat.executeQuery("select * from "+tablename+";");
- }else{
- rs = stat.executeQuery("select * from "+tablename+" where "+whereCondition+";");
- }
-
- out = rsToString(rs);
-
- return out;
- }
-
- public BufferedImage getImage(int id){
- ResultSet rs;
- BufferedImage image = null;
-
- try {
- rs = stat.executeQuery("SELECT imagen FROM auto_pregunta WHERE pregunta_id="+id);
- byte[] bytes = rs.getBytes("imagen");
- InputStream in = new ByteArrayInputStream(bytes);
- image = ImageIO.read(in);
- in.close();
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- return image;
- }
-
- public int getSize(){
- ResultSet rs;
- int result = 0;
-
- try {
- rs = stat.executeQuery("SELECT count(*) FROM auto_pregunta");
- result = rs.getInt(1);
- } catch (SQLException e) {
- e.printStackTrace();
- }
-
- return result;
- }
-
-
-
-
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // //
- // FUNCIONES PRIVADAS //
- // //
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- private String rsToString(ResultSet rs) throws SQLException{
- String out = "";
-
- while (rs.next()) { //mientras existan tuplas
- int i = 1;
- while(true){
- try{
- out = out + rs.getString(i)+" ";
- i++;
- }catch (SQLException e){
- i=1;
- out = out + "\n";
- break;
- }
- }
- }
-
- if ((out!=null) && (!out.equals("")) && (out.charAt(out.length()-1)=='\n')){
- out = out.substring(0, out.length()-1);
- if(out.charAt(out.length()-1)==' '){
- out = out.substring(0, out.length()-1);
- }
- }
- rs.close();
-
- return out;
- }
-
- private byte[] getImageAsByteArray(BufferedImage image) {
- if (image!=null) {
- byte[] imageBytes;
- ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
- try {
- ImageIO.write(image, "jpg", baos);
- } catch (IOException e) {
- e.printStackTrace();
- }
- imageBytes = baos.toByteArray();
- image.flush();
- image = null;
- return imageBytes;
- } else {
- System.out.println("Error : image is null");
- byte[] imageNullBytes = new byte[0];
- return imageNullBytes;
- }
- }
-
- private BufferedImage toBufferedImage(Image image) {
- /* miramos uqe la imagen no sea ya una instancia de BufferedImage */
- if( image instanceof BufferedImage ) {
- /*no hay que hacer nada */
- return( (BufferedImage)image );
- } else {
- /* nos aseguramos que la imagen está totalmente cargada */
- image = new ImageIcon(image).getImage();
- /* creamos la nueva imagen */
- BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB );
- Graphics g = bufferedImage.createGraphics();
- g.drawImage(image,0,0,null);
- g.dispose();
- image = null;
- return( bufferedImage );
- }
- }
-
- private Image loadImageFromPath(String imagePath){
- return java.awt.Toolkit.getDefaultToolkit().getImage(imagePath);
- }
-
- }