{"id":23701181,"url":"https://github.com/gitfrandu4/kata5p1","last_synced_at":"2026-01-29T10:30:16.727Z","repository":{"id":211625165,"uuid":"228769801","full_name":"gitfrandu4/Kata5P1","owner":"gitfrandu4","description":"Kata 5: Primera parte","archived":false,"fork":false,"pushed_at":"2020-01-15T22:59:40.000Z","size":6583,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-30T09:32:46.653Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gitfrandu4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-12-18T06:04:57.000Z","updated_at":"2020-01-15T22:59:43.000Z","dependencies_parsed_at":"2023-12-09T19:52:43.873Z","dependency_job_id":null,"html_url":"https://github.com/gitfrandu4/Kata5P1","commit_stats":null,"previous_names":["gitfrandu4/kata5p1"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2FKata5P1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2FKata5P1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2FKata5P1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitfrandu4%2FKata5P1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitfrandu4","download_url":"https://codeload.github.com/gitfrandu4/Kata5P1/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239776654,"owners_count":19695148,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-30T09:32:30.781Z","updated_at":"2026-01-29T10:30:16.675Z","avatar_url":"https://github.com/gitfrandu4.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kata5P1\n\nKata 5: Primera parte\n\n## Representación gráfica de un Histograma leyendo los datos desde una base de datos\n\n\n**Objetivo**: \n* dado un conjunto de direcciones de email almacenadas en una base de datos mostrar el histograma de los dominios y visualizarlo. \n\n### Introducción\n\nVamos a familiarizarnos con el uso de los gestores de Base de Datos (BD) haciendo unos ejercicios introductorios:\n\n1. Con la Aplicación _DB Browser for SQLite_.\n2. Desde aplicaciones Java\n\n#### A) Ejercicios introductorios con la aplicación _DB Browser for SQLite_\n\nPasos:\n\n1. Abrimos la aplicación _DB Browser for SQLite_\n2. Creamos la BD, por ejemplo, **Prueba**\n3. Creamos la tabla **PEOPLE** con la siguiente estructura:\n\n```sqlite\nCREATE TABLE \"PEOPLE\" (\n\t\"Id\"\tINTEGER PRIMARY KEY AUTOINCREMENT,\n\t\"Name\"\tTEXT NOT NULL,\n\t\"Apellidos\"\tTEXT NOT NULL,\n\t\"Departamento\"\tTEXT NOT NULL\n);\n```\n\nAñadimos al menos tres registros a la tabla PEOPLE:\n\n```Sqli\nselect * from PEOPLE;\n```\n\n| Id   | Name    | Apellidos | Departamento |\n| ---- | ------- | --------- | ------------ |\n| 1    | Alberto | García    | DIS          |\n| 2    | María   | Montes    | DUI          |\n| 3    | Luisa   | Cabello   | DMA          |\n\n\n\n#### B) Interacción de JAVA con _SQLite_ utilizando la API JDBC (_Java Database Connectivity_)\n\nUsaremos un controlador JDBC moderno que se llama paquete _SQLiteJDBC_. Este paquete contiene tanto clases de Java como bibliotecas nativas de SQLite para Windows, Mac OS X y Linux. \n\nPasos:\n\n1. Creamos un nuevo proyecto NetBeans.\n\n2. Descargarnos el último driver de sqlite-jdbc-3.23.1.jar\n\n   https://bitbucket.org/xerial/sqlite-jdbc/src/default/\n\n3. Importamos la librería a nuestro proyecto.\n\n4. Realizaremos diferentes ejemplos de operaciones para aprender la interacción Java-SQLite.\n\n\n\n##### Ejemplo 1: Cadena (String) de conexión SQLite.\n\nEl controlador de JDBC de _SQLite_ nos permite cargar una base de datos _SQLite_ desde el sistema de archivos utilizando la siguiente cadena de conexión:\n\n```Java\nString url = jdbc:sqlite:RUTA_A_BD;\n```\n\n**Posteriormente, establecemos la conexión a través de un objeto con la clase** `Connection` **y el método** `DriverManager.getConnection(url)`:\n\n```Java\nConnection con = null;\n// ...\ncon = DriverManager.getConnection(url);\n```\n\nEn el siguiente ejemplo se usará el controlador JDBC de _SQLite_ para cargar la base de datos Prueba.db\n\n```Java\npackage kata5;\n\nimport java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.SQLException;\n\npublic class Kata5 {\n\n    public static void main(String[] args) {\n        connect(); \n    }\n    \n    private static void connect () {\n        Connection conn = null;\n        \n        try {\n            // parámetros de la BD\n            String url = \"jdbc:sqlite:Prueba.db\";\n            //Creamos la conexión a la BD\n            conn = DriverManager.getConnection(url);\n            \n            System.out.println(\"Conexión a SQLite establecida\");\n            \n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        } finally {\n            try {\n                if (conn != null) {\n                    conn.close();\n                }\n            } catch (SQLException ex) {\n                System.out.println(ex.getMessage());\n            }\n        }\n    }\n    \n}\n```\n\n\n\n##### Ejemplo 2. Seleccionar registros de una tabla existente.\n\nSeguiremos los siguientes pasos:\n\n1. Creamos un objeto `Connection` para conectarnos a la BD _SQLite_.\n2. Creamos una instancia de `Statement` a partir del objeto `Connection`.\n3. Se crea una instancia de la clase `ResultSet` invocando el método `executeQuery` del objeto `Statement`. Este método acepte una instrucción `Select`.\n4. Se hace un bucle usando el método `next()` del objeto `ResultSet`.\n5. Finalmente, se usa un método get de `Resulset`, como por ejemplo, `getInt( )`, `getString( )`, `getDouble( )`, etc. para obtener en cada iteración los datos. \n\nEn el siguiente ejemplo, se usará el controlador JDBC de _SQLite_ para cargar la base de datos Kata5.db y seleccionar todos los registros de la tabla PEOPLE.\n\n```Java\npackage kata5;\n\nimport java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.ResultSet;\nimport java.sql.SQLException;\nimport java.sql.Statement;\n\npublic class SelectApp {\n    \n    // Se conecta a la BD y se devuelve un objeto Connection\n    private Connection connect () {\n        // SQLite connection string\n        String url = new String(\"jdbc:sqlite:Kata5.db\");\n        Connection conn = null;\n        \n        try {\n            conn = DriverManager.getConnection(url);\n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        }\n        \n        return conn; \n    }\n    \n    // Se seleccionan todos los registros de la tabla PEOPLE\n    public void selectAll() {\n        String sql = \"SELECT * FROM PEOPLE\";\n        \n        try (Connection conn = this.connect();\n            Statement stmt = conn.createStatement();\n            ResultSet rs = stmt.executeQuery(sql)){\n            \n            // Bucle sobre el conjunto de registros\n            while(rs.next()) {\n                System.out.println(rs.getInt(\"id\") + \"\\t\" +\n                        rs.getString(\"Name\") + \"\\t\" +\n                        rs.getString(\"Apellidos\") + \"\\t\" +\n                        rs.getString(\"Departamento\") + \"\\t\");\n            } \n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        }\n    }\n}\n```\n\n```Java\npackage kata5;\n\npublic class Kata5 {\n    \n    public static void main (String[] args) {\n        SelectApp app = new SelectApp();\n        app.selectAll();\n    }\n}\n```\n\nSalida:\n\n```\n1 Alberto\tGarcía \t\tDIS\n2 María \tMontes \t\tDUI\n3 Luisa\t \tCabello \tDMA\n```\n\n\n\n##### Ejemplo 3. Crear una nueva BD.\n\nSeguiremos los siguientes pasos:\n\n* Se especifica el nombre y la ruta.\n* Se conecta a la BD a través del driver _SQLite_ JDBC: al conectar a una BD inexistente, _SQLite_ la crea automáticamente. \n\nEn el siguiente ejemplo se usará el controlador JDBC de _SQLite_ para crear la base de datos `mail.db`.\n\n```java\npackage kata5;\n\nimport java.sql.Connection;\nimport java.sql.DatabaseMetaData;\nimport java.sql.DriverManager;\nimport java.sql.SQLException;\n\npublic class CrearBD {\n    \n    public static void createNewDatabase (String fileName) {\n        String url = \"jdbc:sqlite:\" + fileName;\n        \n        try (Connection conn = DriverManager.getConnection(url)) {\n            if (conn != null) {\n                DatabaseMetaData meta = conn.getMetaData ();\n                System.out.println(\"El driver es \" + meta.getDriverName());\n                System.out.println(\"Se ha creado una nueva BD.\");\n            }\n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        }\n    }\n    \n    public static void main (String[] args) {\n        createNewDatabase (\"mail.db\");\n    }\n}\n```\n\nSalida:\n\n```\nEl driver es SQLite JDBC\nSe ha creado una nueva BD.\n```\n\n\n\n##### Ejemplo 4. Crear una tabla en una BD.\n\nSeguiremos los siguientes pasos:\n\n* Se define una cadena que contenga la instrucción `CREATE TABLE`.\n* Se conecta a la BD que contenga dicha tabla.\n* Se crea una instancia de la clase `Statement` a partir del objeto `Connection`\n* Se ejecuta la instrucción `CREATE TABLE` invocando al método `executeUpdate( )` del objeto `Statement`.\n\nEn el siguiente ejemplo se usará el controlador JDBC de _SQLite_ para crear la tabla `direcc_email` en la base de datos mail.bd\n\n```Java\npackage kata5;\nimport java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.SQLException;\nimport java.sql.Statement;\n\npublic class CrearTabla {\n    \n    public static void createNewTable () {\n        // Cadena de conexión SQLite\n        String url = \"jdbc:sqlite:mail.db\";\n        \n        // Instrucción SQL para crar una nueva tabla\n        String sql = \"CREATE TABLE IF NOT EXISTS direcc_email (\\n\"\n                + \" id integer PRIMARY KEY AUTOINCREMENT, \\n\"\n                + \" direccion text NOT NULL);\";\n        \n        try (Connection conn = DriverManager.getConnection(url);\n            \tStatement stmt = conn.createStatement()) {\n            // Se crea la nueva tabla\n            stmt.execute(sql);\n            System.out.println(\"Tabla creada\");\n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        }\n    }\n    \n    public static void main (String [] args) {\n        createNewTable();\n    }\n}\n```\n\nSalida:\n\n```\nTabla creada\n```\n\nPodemos comprobar la creación de la tabla en la BD a través de _DB Browser for SQLite_\n\n\n\n##### Ejemplo 5. Insertar datos en una tabla de una BD.\n\n* Nos conectamos a la BD _SQLite_\n* Se define una cadena que contenga la instrucción `INSERT`. Si se usan parámetros, debemos usar un carácter ? por cada parámetro.\n* Se crea una instancia de la clase `Preparedstatement` a partir del objeto `Connection`.\n* Se establecen los correspondientes valores para cada marcador de posición usando un método set del objeto `Preparedstatement`, como por ejemplo, `setInit()`, `setString()`, etc.\n* Finalmente se invoca el método `executeUpdate()` del objeto `Preparedstatement` para ejecutar la instrucción `Insert`.\n\nEn el siguiente ejemplo se insertan tres valores en el campo `direccion` de la tabla `direcc_email` de la base de datos `mail.db` que creamos en el ejemplo anterior. \n\n```java\npackage kata5;\nimport java.sql.Connection;\nimport java.sql.DriverManager;\nimport java.sql.PreparedStatement;\nimport java.sql.SQLException;\n\npublic class InsertarDatosTabla {\n    \n    private Connection connect () {\n        // Cadena de conexión SQLite\n        String url = \"jdbc:sqlite:mail.db\";\n        Connection conn = null;\n        \n        try {\n            conn = DriverManager.getConnection(url);\n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        }\n        return conn;\n    }\n    \n    // Método para insertar datos en la tabla direcc_email\n    public void insert (String email) {\n        String sql = \"INSERT INTO direcc_email(direccion) VALUES (?)\";\n        \n        try (Connection conn = this.connect();\n            PreparedStatement pstmt = conn.prepareStatement(sql)) {\n            pstmt.setString(1, email);\n            pstmt.executeUpdate();\n        } catch (SQLException e) {\n            System.out.println(e.getMessage());\n        }\n    }\n    \n    public static void main (String[] args){\n        InsertarDatosTabla idt = new InsertarDatosTabla();\n        // Se insertan tres nuevas líneas\n        idt.insert(\"abd@ulpgc.es\");\n        idt.insert(\"xyz@ull.es\");\n        idt.insert(\"def123@gmail.com\");\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fkata5p1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitfrandu4%2Fkata5p1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitfrandu4%2Fkata5p1/lists"}