Java – Un resumen organizado….o no.

Llevo escribiendo artículos sobre Java, programación  de Java, entorno de Java… demasiado tiempo, y como ahora estoy preparando un curso de dicho tema, se me ha ocurrido hacer una especie de indice de lo que llevo publicado para que tanto vosotros como yo, podamos acudir a un tema concreto. Esto también me ha permitido detectar duplicados y faltas, por lo que deberé seguir ampliando la colección…. en cuanto pueda, incluso darle formato de libro…..ya veremos; de momento os dejo este indice Sigue leyendo

Publicado en Formacion, Java | Deja un comentario

PHP – Presentacion del curso

Mucho tiempo ha pasado desde que en 1994 se le ocurrió a Rasmus Lerdof “inventar” un lenguaje para la creación de sitios webs dinámicos, y como era una especie de pequeña herramienta para construir HTML, lo llamo PHP (PHP Hipertext preprocesor), y supongo que no llego a pensar en la importancia que tendria unos años mas tarde ese lenguaje. Pero aquí estamos, y hoy nos costaría mucho imaginarnos la web sin su existencia. Cierto es que hay otros lenguajes de servidor, pero PHP es el mas barato y, hoy por hoy el mas extendido, de forma que vamos a ver como se escribe un programa en él. Sigue leyendo

Publicado en Desarrollo Web, PHP y MySQL/MariaDB | 2 comentarios

Tu máquina de desarrollo. Instalando LAMP

Días atrás, os explicaba como instalar un servidor web en vuestra maquina de desarrollo bajo windows. Como poco a poco Linux penetra en nuestro mundo, hoy os comento como instalar un servidor web en vuestra maquina Linux: LAMP. Sigue leyendo

Publicado en Desarrollo Web, Linux | Etiquetado , , , , , | 1 comentario

HTML5 – Presentacion

Desde 1998 en que finaliza el desarrollo de HTML (4.0) han venido sucediéndose una serie de operaciones para establecer un nuevo estándar web. El XML primero, y su consecuente XHTML fue una buena apuesta, pero su posible sucesor el XHTML 2.0, cuyo desarrollo se abandona a finales del 2009, fue un fracaso. Eso obliga al W3C a buscar un nuevo camino, y lo encuentra retomando un trabajo iniciado por WHATWG  (Mozilla, Opera, Apple, Google…) sobre 2004 como variante a la linea de W3C.

Con todo ello, se anuncia en 2012 la recomendación candidata de Html5 y se prevee para 2020 la recomendación final.

En el curso que empezamos hoy, vamos a explicar que es HTML5HTML5_logo_and_wordmark.svg Sigue leyendo

Publicado en HTML5 | Etiquetado , | 1 comentario

Monta tu propio WordPress….y gratis

Si estáis decididos a probar suerte como webmaster con todas sus consecuencias, os invito a que probeis a instalar un wordpress en tu propio servidor. WordPress es gratuito, luego, si eso lo combinamos con un hosting gratuito…tendremos una interesante plataforma para aprender. Sigue leyendo

Publicado en Desarrollo Web, Divulgacion, Empezando en, WordPress | 3 comentarios

Macros de Excel

Con éste artículo, iniciamos una colección dedicada a la utilización de las hojas de cálculo de Microsoft Excel, y, más concretamente, a la forma que tiene este producto de solucionar y simplificar las tareas repetitivas. Debido a que estos artículos los voy escribiendo a medida que me surge la necesidad, he empezado por una parte de la formación Excel, bastante avanzada, sin embargo, y debido que su aprendizaje tiene mucho mas que ver con la programación que con Excel, pienso que se puede aprender de forma paralela a cualquier otro curso de Excel medio, y ya dejo claro que me comprometo a escribirlo… algún día. Que sea mas pronto o mas tarde, dependerá del trabajo, y de las necesidades de los lectores.

Sigue leyendo

Publicado en Excel, Formacion | Etiquetado , , | Deja un comentario

Ejercicio Java. Trabajando con una Base de datos

Como durante la creación de  nuestra base de datos no exigimos integridad, puede que alguien haya creado algún cliente y le haya indicado alguna provincia que no existe, por lo que vamos a escribir un programa que lea toda la tabla de Clientes, y para cada registro, compruebe si existe la provincia que indica en Id_Provincia; si no existiera, debería dar un mensaje, solicitar que indiquen el nombre de la provincia, y lo añada a la base de datos

Para ello, podemos escribir las siguientes clases

ErrorSQL ——————————————————————————————-

Clase para gestión de errores, mínima codificación, Extiende Exception. Los modulos utilizaran esta clase para informar de errores

Conexión: ——————————————————————————————-

Clase para abrir y cerrar la conexión. No se puede instanciar. Dos métodos estáticos.

getConexion() comprueba si la conexión ya está abierta, y si no, la abre. A continuación devuelve un objeto Connection

closeConexion() Tras comprobar que el objeto Connection no es nulo y está abierta, cierra la conexión y deja a nulo el campo de control

ProcesarCliente: ———————————————————————————-

Esta clase será ejecutable y es la que utilizara las clases anteriores para hacer el trabajo pedido. En esta primera versión, las entradas se pueden hacer utilizando Scanner

 

Solucion

Publicado en Formacion, Java | Deja un comentario

Ejercicio Java. Trabajando con una Base de datos(Solución)

ErrorSQL

Se trata de una clase muy sencilla, ya que solo queremos personalizar el error, de forma que bastara con:

 

Conexión

Se trata de organizar un poco lo que vimos anteriormente

La parte visible se compone de todas las constantes necesarias, el constructor y los dos métodos

En getConexion, comprueba se ya existe la conexión, para devolverla sin más, y si no existe, entonces llama al método abrir conexión, y se guarda la conexión abierta, antes de devolverla; asi la siguiente vez, ya la tendrá abierta y la devolverá directamente

En método closeConexion se asegura que exista el objeto conexión, y que este abierto, si es así, la cierra, y a continuación, deja a null la variable para que el método getConexion funcione correctamente si lo llaman.

Por último, el método abrirConexion es muy semejante al escrito anteriormente, pero interceptando los errores, para devolverlo como ErrorSQL

ProcesarClientes

Esta es la clase de arranque, empezamos definiendo los literales y las variables que vamos a necesitar

Preparamos ordenes SQL para leer la tabla de Clientes, para leer un registro de Provincia y para grabar un registro de Provincia. Estos dos últimos con “?” para poder sustituir luego

A continuación cargamos variables y hacemos el preproceso

Abrimos Scanner sobre la consola para poder pedir datos (28), solicitamos una conexión (34), cargamos los PreparedStatement para leer provincias e insertarlas (35,36) y realizamos el SELECT sobre clientes consiguiendo el ResultSet (39,41)

Siguiente paso. Bucle de lectura/proceso

Toda la lectura la hacemos dentro del bucle while que esta entre 50 y 66, y para cada registro, extraemos el id_provincia (51, el nombre(52) y la población(53) para facilitarlo como información, al pedir la provincia. La línea 64, solo sirve para comprobar que todo funciona.

En la line 55 utilizamos el método verProvincia al que le pasamos el id_provincia y devolverá true si existe, y false si no existe

Si la prueba devuelve false, llamamos al método actualizarProvincia que pide los datos por teclado y realiza un insert en la BBDD

El párrafo que va de la 60 a la 66 utiliza la cláusula finally para cerrar la conexión a la BBDD

A continuación el método verProvincia

Le añade el id_provincia al PreparedStatement que ya tenía (77) y lanza la query; si lo encuentra, la pregunta isBeforeFirst le dará true, por lo que modificara el boleano y lo retornara

Por ultimo para realizar la actualización, tenemos este método

En las líneas  98 a 102, realiza el dialogo para la petición de información

En las líneas  105 a 107 prepara la orden de Insert y en la 108 hacemos el Insert.

Notas:

En las líneas  81 y 109 no podemos cerrar el PreparedStatement, a menos que queramos repetir la orden de las líneas  35 y 36

No vamos cerrando los objetos de forma explícita, porque cuando cerramos la base de datos, automáticamente se cierran todos los objetos que cuelgan de esa conexión.

Publicado en Sin categoría | Deja un comentario

Java para programadores (10.5) – Ejecución de consultas y Resultsets

Una vez hecha la conexión, podemos empezar a lanzar órdenes sobre la base de datos; para hacerlo necesitamos un:

  • Statement – Nos permite lanzar consultas a la base de datos.
  • PreparedStatement – Nos permite guardar consultas con parámetros variables, que podremos modificar antes de ejecutarlas.

Cuando terminemos de utilizar uno de estos objetos, deberemos utilizar su método close() para liberar los recursos que haya podido reservar.

Trabajando con Statemen

Esta clase tiene tres métodos

  • executeQuery – Ejecuta la orden SQL dada y devuelve un objeto ResultSet con el conjunto de filas y columnas seleccionadas. Solo utilizaremos este método para las ordenes SELECT
  • executeUpdate – Ejecuta la orden SQL dada pero solo devuelve un int con el número de filas afectadas. Utilizaremos este método para cualquier orden, menos la SELECT
  • execute – Devuelve True si se ha conseguido un Resultset, si no, devuelve False. Deberemos utilizar este método cuando no conozcamos el contenido del SQL por lo que no podamos tomar la decisión de utilizar executeQuery o executeUpdate.

Si queremos realizar un Insert, podemos hacer:

Y nos devolverá en result el número de filas afectadas, 1 en este caso

Si queremos realizar un SELECT para obtener la lista de todas las provincias, haremos

Trabajando con PreparedStatemen

Esta clase tiene mucha semejanza con Statement, por lo que tiene sus mismos tres métodos para ejecutar querys (executeQuery, executeUpdate, y execute.

La diferencia reside en que podemos dejar preparada la query, pero dejando variables por resolver, que las cumplimentaremos con los valores que nos interés.

Por ejemplo, si necesitamos seleccionar una provincia en concreto, podríamos hacer:

Pero esto solo nos permitiría seleccionar la provincia 1. Con PreparedStatement  podemos hacer:

Y cuando lo necesitáramos, haríamos

Incorporando los parámetros que habíamos dejado con un ‘?’

Para ello disponemos de los métodos necesarios para los tipos de java (setInt, setFloat, setDouble, setString,…..) , que reciben dos parámetros el primero es un int que indica la posición que se va a sustituir, y el segundo es el valor a sustituir. En nuestro ejemplo, hemos sustituido el primer (1) interrogante, por el valor2

Manipulación de resultados con ResultSet

El objeto Resultset representa en nuestro programa, el resultado de un SELECT, por lo que tiene acceso a todas las filas y columnas seleccionadas

Realmente, este objeto, en un momento determinado, solo tiene acceso a todas las columnas de UNA fila de nuestra consulta, por lo que deberemos ir haciendo avanzar el ResutSet, para poder acceder a toda la información.

Cuando hemos terminado de crearlo con un SELECT, Resultset está apuntando a una fila inexistente, por lo que para poder leer la primera fila, deberemos avanzar una, y eso lo haremos con next(). Un objeto ResultSet, por defecto, solo se puede mover hacia adelante.

Después de cada orden, deberemos comprobar si se ha llegado al final de la selección, controlando que no de false. Luego, ya podemos leer su información, utilizando el método adecuado. Aquí tenemos un ejemplo de cómo podríamos leer nuestra tabla de Provincias y volcar la información en la consola.

Este objeto también dispone de métodos para recoger cualquier tipo java (getInt, getDouble, getString), y en cada caso, deberemos indicar el nombre de la columna que deseamos obtener.

Cuando el Resultset es “scrollable” (que se puede desplazar atrás y adelante), disponemos de métodos para hacer avanzar el puntero de resultset al primer registro, al ultimo, avanzar de uno en uno, adelante y atras… Naturalmente, esto hace mas lenta la operación, por lo que solo escogeremos esta posibilidad, cuando lo necesitemos.

Para que un resultset  sea  scrollable, deberemos usar un Statement creado para esa funcionalidad con

Y si es con PreparedStatement, deberemos hacer (en el ejemplo anterior)

Este tiene la posibilidad de poder cambiar su posición con

previous() Vuelve a la posición que estaba antes del ultimo next()
first() Va a la primera posición del actual conjunto
beforeFist() Deja el cursor en el mismo punto que estaba tras realizar el SELECT, esto es, apuntando a un punto justamente anterior al primer registro.
last() Se posiciona en el último registro de este conjunto
absolute(int fila) Se posiciona en el registro indicado por “fila” contando desde el principio del conjunto
relative(int fila) Se mueve tantas filas como indique “fila”, que puede ser positivo o negativo.
getRow() Devuelve el número de fila (registro) actual

 

Tambien podemos preguntar por la posición del cursor con

isFirst() Indica si el cursor está en la primera fila de resultados
isLast() Indica si el cursor está en la ultima fila de resultados
isBeforeFirst Indica se está antes de la primera fila , deberemos realizar un next() antes de poder leer las columnas
isAfterLast() Indica si ya se ejecutó el ultimo next(), ya no podemos acceder a información.

 

Hay más información del objeto ResultSet en https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html

 

Publicado en Formacion, Java, SQL | Etiquetado , | Deja un comentario

Java para programadores (10.4) Conexion a una Base de datos

Para que un programa Java se conecte a una base de datos, deberá seguir los paso indicados a continuación.

  • Cargar el driver JDBC
  • Indicar la ubicación de la base de datos, por medio de la URL
  • Crear un objeto Connection que será la conexión a la BBDD.

Sigue leyendo

Publicado en Formacion, Java, SQL | Etiquetado | Deja un comentario

Java para programadores (10.3) Bases de datos

Cuando salimos  de entornos propietarios como puede ser Acces, entramos en el gran mundo de las bases de datos, Oracle, MySQL, MsSQL son motores que están a nuestro alcance; y si queremos utilizarlos, debemos saber algunas cosas.

Sigue leyendo

Publicado en Formacion, Java, SQL | Etiquetado , , | Deja un comentario

Trabajando con Bases de Datos

Cuando realizamos una entrada de datos, queremos que nuestros datos persistan después de que cerremos la aplicación; en los siguientes temas repasaremos como conectarnos a una base de datos para poder guardar nuestra información, así como extraerla y utilizarla

Sigue leyendo

Publicado en Formacion, PHP y MySQL/MariaDB, SQL | Etiquetado , , | Deja un comentario

El lenguaje SQL

Vamos a revisar algunas instrucciones muy básicas de sql; para mayor comodidad, podemos utilizar las hojas que nos proporciona Eclipse segun definimos aqui, o podeis instalar  MySql en linux; tenéis este artículo que os puede ayudar: Sigue leyendo

Publicado en Formacion, PHP y MySQL/MariaDB | Etiquetado , , | Deja un comentario

Instalación de la Base de datos y un entorno gráfico

Todo nuestro trabajo, se va a realizar utilizando ordenes SQL, tanto para guardar la información, como para extraerla,  actualizarla o borrarla, pero para poder utilizar este lenguaje, necesitamos tener acceso a una base de datos, y nos puede servir la mayoría de RDBMS que hay en el mercado, ya que, al quedarnos en la parte estándar de SQL, las Querys (así  llamaremos a las órdenes que vamos a lanzar), deberían funcionar en la mayoría de ella.

Sin embargo, y para centrarnos en alguna, vamos a trabajar de forma explícita con dos muy conocidas:

 

Si queréis instalar MySql en linux, tenéis este artículo que os puede ayudar:

Tu máquina de desarrollo. Instalando LAMP

si vais a realizar la instalación de MySQL en Windows, podéis leer este otro:

Tu maquina de desarrollo – Instalando XAMPP (en Windows)

 

Si optáis por utilizar la versión gratuita de la famosa base de datos de Oracle, encontrareis una guía de instalación en.

Instalando Oracle Database express Edition

Instalando el entorno Grafico

Una vez instalada y funcionando la Base de datos (o más exactamente el RDBMS) y aunque todos disponen de una interface de línea de comando ( o casi), es cómodo disponer de un sitio en donde escribir nuestras querys, y que nos pueda ayudar recordando nombres de campo, nombres de tabla,….

En ese aspecto, todavía hay un surtido mayor, aunque nosotros nos vamos a limitar a unos pocos:

Para MySQL, disponemos de:

  • phpMyAdmin , que funciona en entorno web
  • MySQL Workbench, aplicación de escritorio que podéis instalar siguiendo el artículo “Mysql: instalando workbench

Para Oracle Express Edition utilizaremos otra herramienta de Oracle, Oracle SQL Developer cuya instalación la tenéis detallada en “Instalando y conectando SQL Developer

Nosotros, aquí vamos a ver como conectar una BBDD a Eclipse; haremos la experiencia con MySQL

Para ello, descargamos el driver de https://dev.mysql.com/downloads/connector/j/

Y escogemos el que nos interese, a continuación

Debéis descomprimir el fichero,

Como resultado de esto, deberéis tener una carpeta con el Driver; en la carpeta descomprimida.

Aunque Eclipse Tiene una perspectiva prevista, es mejor que añadamos un plugin; para eso, vamos a Help->Eclipse Marketplace

Y en la ventana que aparece, escribimos DTP (Data Tools Platform) y buscamos

Ya podemos instalar el plugin

 

Ahora, abrimos Eclipse y cambiamos la perspectiva

Seleccionando Otras

Podréis seleccionar “Database Development”, y allí crear la conexión

Seleccionamos “Nuevo”

Escogemos MySQL,  e indicamos el nombre con el que reconoceremos la conexión (ConexionPruebas), y pulsamos “Next”.

Si no os aparece ningún Driver, pulsar en el botón que os indico en la imagen:

Se os ofrece una lista de drivers:

Al seleccionarlo, puede aparecer un mensaje (remarcado en la imagen) diciendo que no se encuentra el jar correspondiente. Pasáis a la pestaña de “JAR List”,

En donde posiblemente, vosotros tengáis otra línea, pero podéis pulsar en “Edit  JAR/Zip…” y buscar en vuestro disco, la carpeta que habéis descomprimido

 

Al darle OK, volverá a la pantalla anterior, pero esta vez tendréis un driver disponible

Al confirmar esta pantalla, aparece el dialogo de conexión

En Database deberemos indicar la BBDD a la que nos queremos conectar; si no existe, debemos asegurarnos que en URL no hay escrito nada más que la ruta al motor.

La Password es la que hemos indicado durante la instalación de MySQL

Marcaremos Save password, para evitar tener que estarla introduciendo constantemente, y siempre que estemos en entorno seguro…

Podéis probar que los datos son Correctos con el botón Test Connection.

En la perspectiva de “Database Development” nos aparece la conexión creada; y como necesitamos un área para poder escribir los comandos, utilizamos sobre la conexión el botón derecho de ratón y seleccionamos SQL Scrapbook.

En la hoja que aparece, si en la parte de arriba no están los datos de conexión, los seleccionamos nosotros

Y como no tenemos ninguna base de datos, no podemos rellenar el último desplegable, para solucionarlo, vamos a crear nuestra base de datos

Escribimos la orden, utilizamos el botón derecho para dar la orden “Execute All”

Y ya la tendremos creada. Ahora tenemos que modificar los datos de conexión, para ello, botón derecho sobre la conexión

Y seleccionamos Properties

Y le añadimos el nombre de la base de datos recién creada, podemos probar la conexión, y cerrar el dialogo con “OK”

Cada uno de estos Scrapook que utilicemos, los podemos ir guardando como archivos SQL para tener las ordenes preparadas, y también podemos utilizar el mismo sistema para ir consiguiendo nuevas hojas para escribir.

Ahora, podemos utilizar uno, para crear una tabla

Crearemos la tabla PAIS ; la orden será:

Pero antes de ejecutarla, debemos completar los datos de la cabecera, incluyendo el nombre de la base de datos

En la parte inferior de la pantalla, aparece el resultado; en este caso:

Si deseamos borrar una tabla, nos bastaría con hacer

Vamos a crear el resto de tablas que vamos a usar; la de PROVINCIAS

Y la de clientes

Ahora introduciremos algunos datos, para poder probar; para ello, se utiliza la instrucción INSERT (el siguiente código se puede copiar)

Insert into PAIS (ID_PAIS,PAIS_NOMBRE) values ('1','España');

— Tabla de provincias


Insert into PROVINCIA (ID_PROVINCIA,PROVINCIA_NOMBRE,ID_PAIS) 
                         values ('1','Barcelona','1');

Insert into PROVINCIA (ID_PROVINCIA,PROVINCIA_NOMBRE,ID_PAIS) 
                        values ('6','Tarragona','1');

Insert into PROVINCIA (ID_PROVINCIA,PROVINCIA_NOMBRE,ID_PAIS) 
                       values ('7','Lerida','1');

Insert into PROVINCIA (ID_PROVINCIA,PROVINCIA_NOMBRE,ID_PAIS) 
                       values ('10','Gerona','1');

— Tabla de clientes

Insert into CLIENTES (ID,USUARIO,PASSWORD,NOMBRE,DIRECCION,POBLACION,ID_PROVINCIA,FECHA_ALTA)
       values ('1','miguel','miguel','Miguel Garcia','Pez 5','Barcelona','1','1995-10-20');

Insert into CLIENTES (ID,USUARIO,PASSWORD,NOMBRE,DIRECCION,POBLACION,ID_PROVINCIA,FECHA_ALTA) 
      values ('2','antonio','antonio','Antonio Perez','Acuario 32 1º','Barcelona','1','2006-12-05');

Insert into CLIENTES (ID,USUARIO,PASSWORD,NOMBRE,DIRECCION,POBLACION,ID_PROVINCIA,FECHA_ALTA) 
      values ('3','jjose','jjose','Jose Rodriguez','Marsalada 123 ','Barcelona','1','2015-05-01');

NOTA:

Las columnas IDxxxx, las hemos declarado Clave Primaria, y AUTO_INCREMENT, por lo que la podemos dejar en blanco, pero si lo indicamos, no se puede repetir.

 

Ahora, podemos ver el contenido de cualquier tabla, desplengando el epígrafe correspondiente, y con el botón derecho, seleccionamos Data->edit

Y nos aparece el contenido de la tabla

Y nos permite modificar el contenido

Publicado en Formacion, PHP y MySQL/MariaDB | Etiquetado , | Deja un comentario

Java para programadores (9.7) – Cuadros de dialogo

Los cuadros de dialogo, son objetos independientes de la ventana de trabajo (aunque pueden bloquearla). Normalmente, los utilizaremos para comunicar mensajes o para realizar acciones que por sus características, se ha de realizar aparte de la pantalla principal. Sigue leyendo

Publicado en Formacion, Java | Etiquetado , , | Deja un comentario

Java para programadores (9.6) – Listas y Tablas

JList – Muestra un conjunto de opciones de texto y/o gráficas y permite selección única, de rango simple y de rango múltiple

Constructor

JList() Crea un JList vacio y read-only.
JList(ary[] listData) Crea JList con los elementos del array

 

Metodos

int getSelectedIndex()
Object getSelectedValue()
Devuelve el índice del elemento seleccionado o su valor
void setSelectionMode(ListSelectionModel.SELECTION Forma en que se realizara la selección

SINGLE_SELECTION
SINGLE_INTERVAL_SELECTION
MULTIPLE_INTERVAL_SELECTION

swing jlist

 

 

JTable Componente con capacidad para mostrar información de forma tabular, teniendo filas y columnas

Este componente se especializa en la presentación de Arrays multidimensionales, y para eso, deberemos indicar el array de datos, con la información a mostrar, y un segundo array de una dimensión, para indicar los títulos de las columnas

swing JTable

Publicado en Formacion, Java | Etiquetado , | Deja un comentario