Java

Comunicación bidireccional entre procesos distribuidos con RMI de Java

2021-12-19 - Categorías: Java
Java

Para el que lo pueda necesitar, este es un codekata, howto o apunte para implementar la comunicación bidireccional entre Clientes y Servidores usando RMI, lo que se llama implementar callbacks hacia los clientes. Es una vuelta de tuerca al post anterior sobre la implementación del RMI de Java, Remote Method Invocation.

Este post es una ampliación para usar clientes y servidores con RMI de Java, de forma que tanto el servidor como el cliente actúan invocando métodos remotos en el cliente y servidor.

Continuar leyendo..

Exponiendo y consumiendo servicios remotos RMI de Java

2021-12-19 - Categorías: Java
Java

Esto es un codekata, apunte o resumen sobre esta funcionalidad de Java. Resumiendo, Java RMI es una funcionalidad que viene implementada de casa, mediante la cual podemos conectar servicios distribuidos, de forma que las funciones programadas se pueden ejecutar desde cualquier programa en cualquier servidor.

Es decir, RMI significa Remote Method Invocation, entonces tenemos que mediante estos mecanismos podemos declarar funciones en objetos de Java, y exponerlos a la Red para ser utilizados por procesos remotos. Se consigue de esta forma transparente para el programador, que se lancen acciones en servidores remotos. Así se puede escalar los procesos entre varios servidores, distribuyendo la carga y funcionalidades.

Es más fácil leer el fuente que explicarlo, al grano..

Continuar leyendo..

Java: organizando el código fuente en paquetes, directorios, ficheros y clases

2021-12-19 - Categorías: Java
Java

Sencillo codekata, apunte, resumen, o como queramos llamarlo, sobre cómo funciona la organización del código fuente en paquetes de Java. Esto se hace a base de nombres de directorios y ficheros. Es decir, un directorio es un package. Dentro de cada directorio, cada clase puede tener visibilidad de su mismo directorio o subdirectorios. Se organizan a base de la concatenación de nombres de directorio con subdirectorios y ficheros. Aparte de esto, dentro de cada fichero .java, debe haber una clase con el mismo nombre.

Sin más teoría, vamos al grano.. que es más fácil verlo con código.

Continuar leyendo..

Java: diferencias entre ArrayList y HashMap

2021-11-14 - Categorías: General / Java
Arrays colecciones vectores

Este es un codekata, apunte, de copia y pega con algo de código fuente sobre el uso de ArrayList y HashMap. Esto son dos tipos de datos básicos que nos provee Java, que será el siguiente punto de partida cuando tengamos que manejar colecciones de datos de información.

En Java tenemos que definir el tipo de dato y la forma de funcionamiento que queremos que tenga internamente, para obtener un comportamiento mejor de una forma o de otra. Tenemos que a partir de los vectores básicos, el siguiente paso será usar tipos de datos como los ArrayList, HashMap, LinkedList, HashSet, Iterator.. cada uno internamente está construido de una forma.

Continuar leyendo..

AWS & GNU/Linux: optimizando aplicaciones web

2020-01-28 - Categorías: Amazon Web Services / Drupal / GNU/Linux / Magento / PHP / Prestashop / Symfony / WordPress
GNU/Linux: optimizando servidores
GNU/Linux: optimizando servidores

Aquí estoy de nuevo dejando mi granito de arena en todo esto de la informática. Hoy traigo un howto para la optimización de servidores web. Simplemente, son unas propuestas de configuraciones totalmente estándar y disponibles en las documentaciones oficiales. Pero que mejoran mucho el rendimiento de aplicaciones web, hechas en lenguajes como HTML, CSS, Javascript, PHP, Java, Python, SQL, DQL..

Este post es para optimizar aplicaciones web del tipo WordPress, Prestashop, Magento, Drupal, Symfony.. etcétera. Es una visión general de cómo funcionan las cosas a bajo nivel. Digo a bajo nivel, porque están muy de moda las arquitecturas server-less, o los servidores auto-administrados, aunque también necesiten su optimización. Pero aquí nos remangaremos la camisa, y nos embarraremos hasta el cuello mientras que vamos investigando, aprendiendo y aplicando, para cada proyecto en concreto. Este es un post para los que nos gusta trabajar los servidores, para los que nos gusta ponernos manos a la obra, para experimentar nosotros mismos con los proyectos, rascando cada milisegundo para conseguir que todo vaya lo más rápido posible..

Continuar leyendo..

Del código fuente a la ejecución de los programas

2018-06-08 - Categorías: General
Programming programando

Ya tenemos el código fuente, ¿y ahora? ¿cuál es la magia que hace posible que un código fuente se ejecute?

Todo programa necesita un traductor, que compile o interprete el código fuente para que pueda ser ejecutado. Es una primera diferencia que puede marcarse entre los lenguajes de programación, ya que un lenguaje puede ser interpretado, compilado, o incluso ambas cosas. Además, la ejecución puede ser dependiente de la máquina, o ejecutarse en una máquina virtual, que te independiza de la máquina.

Por ejemplo los lenguajes funcionales o lógicos suelen usarse primeramente interpretados, como Prolog o Haskell mientras se desarrolla, pero también tenemos disponible un compilador para mejorar su eficiencia. PHP es interpretado, aunque ha habido compiladores para mejorar su eficiencia de ejecución. Cabe destacar como curiosidad la Hip Hop Virtual Machine de Facebook que crearon para agilizar PHP, que precisamente compila los ficheros fuente a un código objeto intermedio más rápido de ejecutar. Javascript, Typescript, Ruby, también son interpretados. C, C++, VB, C# son compilados, es decir, se necesita compilar el código fuente a códigos objeto, estos códigos objeto a su vez se linkan, se retraducen, para ejecutarse finalmente en la máquina.

Continuar leyendo..

Java: serializando objetos para guardar y recuperar en ficheros (editado)

2017-05-01 - Categorías: Java
Logo de Java

Desenpolvando un poco temas de Java, hoy traigo un pequeño howto para guardar datos que tenemos representados en clases, en ficheros, sin complicarnos demasiado la vida. Es decir, a veces, necesitamos algo rápido para guardar en ficheros o para transmitir información por la red.

La clase Java, el objeto, debe implementar la interfaz Serializable, será fácilmente guardable como fichero de texto.

Continuar leyendo..

Tabla seleccionable con Swing

2013-07-21 - Categorías: Java / Java Swing

Parece ser que están dando guerra las tablas xD A continuación les dejo un post con un ejemplo de tabla con cajas seleccionables y otros valores que son en éste caso enteros. Luego tenemos un botón con el que podemos recorrer la tabla (el modelo que representa los valores de la tabla) e ir borrando las filas que tienen la caja seleccionable seleccionada, valga la redundancia… 

Al grano, vamos con el ejemplo:
package swing;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

public class TablaSeleccionable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTable table;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TablaSeleccionable frame = new TablaSeleccionable();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public TablaSeleccionable() {
setTitle("Tabla seleccionable by jnj");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 604, 347);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 560, 227);
getContentPane().add(scrollPane);

String[] columnas = { "Los checkbox", "Un dato", "Otro dato" };
final DefaultTableModel modelo;
modelo = new DefaultTableModel(null, columnas);

// hay que programar nuestra propia función getColumnClass para
// poder poner controles como por ejemplo el checkbox con los datos
// booleanos
table = new JTable(modelo) {
private static final long serialVersionUID = 1L;

@Override
public Class getColumnClass(int column) {
switch (column) {
case 0:
return Boolean.class;
case 1:
return Integer.class;
case 2:
return Integer.class;
default:
return Boolean.class;
}
}
};

table.setBounds(26, 26, 463, 332);
scrollPane.setViewportView(table);

// INSERTA UNOS DATOS EN LA TABLA
for (int i = 0; i < 10; i++) {
Object[] nuevafila = { false, i, i };
modelo.addRow(nuevafila);
}

// BOTON QUE ELIMINA FILAS,
// Recorre de atrás hacia adelante las filas eliminando las
// seleccionadas.
JButton btnEliminarFilas = new JButton("Eliminar filas");
btnEliminarFilas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
for (int i = 9; i >= 0; i--) {
// si la fila i, columna 0 es true, es porque está
// seleccionado el checkbox, entonces borra
if (((Boolean) modelo.getValueAt(i, 0)) == true) {
modelo.removeRow(i);
}
}

}
});
btnEliminarFilas.setBounds(10, 249, 201, 23);
contentPane.add(btnEliminarFilas);

}
}
En el ejemplo he puesto un DefaultTableModel por su simplicidad. Hay otras formas de hacer lo mismo, como viene siendo habitual en programación. Espero que sirva.
Saludos!

Java Swing 10: JTable segunda parte, un poco más sobre tablas

2013-05-07 - Categorías: Java / Java Swing

Siguiendo los minitutoriales de la serie Swing, he desarrollado éste post sobre tablas para aprender a usar un poco más las tablas. Vamos al grano.

Introducción

Es necesario:

  • Entorno de Desarrollo.
  • El JDK o JRE, yo he usado el JDK 1.7, pero ya Swing no sigue en desarrollo así que no tiene mucha importancia la versión que uses.

Trato de explicar cómo poner cajas seleccionables (checkbox), listas desplegables (combobox) y cajas de texto formateado, en una tabla. En el ejemplo he puesto una caja que sólo admite un número de 3 dígitos. Más adelante lo vemos.

Para manejar los datos puedes usar directamente el modelo de datos que autogenera un JTable, puedes usar un AbstractTableModel como aparece en muchos de los tutoriales que he encontrado por Internet, o puedes usar una implementación de DefaultTableModel, que internamente usa un vector con el que te permite añadir o borrar filas de forma dinámica. Yo he usado un DefaultTableModel que me ha parecido más interesante porque muchas veces necesitamos añadir o borrar datos de una tabla.

El código fuente

Descargar

package swing;

import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.text.MaskFormatter;

public class JavaSwing10JTable2 extends JFrame {

private static final long serialVersionUID = 1L;
private JTable tabla;
private static MiModelo modelo;

// el main...
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JavaSwing10JTable2 frame = new JavaSwing10JTable2();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

// constructor de la ventana, aquí hace todo
public JavaSwing10JTable2() {

setTitle("Java Swing 9 El JTable 2");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 846, 331);

getContentPane().setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 11, 810, 271);

getContentPane().add(scrollPane);

// usa mi modelo de datos
modelo = new MiModelo();
// crea la tabla con mi modelo
tabla = new JTable(modelo);

//
scrollPane.setViewportView(tabla);

// EDITORES PERSONALIZADOS EN LA TABLA
// la caja seleccionable, el checkbox lo pone sólo
// con la función getColumnClass
TableCellEditor editor;

// configura el combo
JComboBox comboBox = new JComboBox();
comboBox.addItem("Opción A");
comboBox.addItem("Opción B");
comboBox.addItem("Opción C");

// configura el campo de texto
JFormattedTextField campoTexto = null;
try {
// sólo admite 3 números
campoTexto = new JFormattedTextField(new MaskFormatter("###"));
} catch (Exception e) {
System.out.println(e.getMessage());
}

// combo a la columna 3
editor = new DefaultCellEditor(comboBox);
tabla.getColumnModel().getColumn(3).setCellEditor(editor);

editor = new DefaultCellEditor(campoTexto);
tabla.getColumnModel().getColumn(4).setCellEditor(editor);

// capturador de eventos del ratón en la tabla
// autogenerado con Eclipse
tabla.addMouseListener(new MouseListener() {

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub

int fila = tabla.rowAtPoint(e.getPoint());
int columna = tabla.columnAtPoint(e.getPoint());

JOptionPane.showMessageDialog(null, "Valor de la celda: "
+ tabla.getValueAt(fila, columna).toString());
}
});

}

// modelo de datos, usa DefaultTableModel que internamente
// tiene un vector que nos permite por ejemplo añadir una fila
// fácilmente con addRow...
private static class MiModelo extends DefaultTableModel {

private static final long serialVersionUID = 1L;

private static final String[] nombresColumna = { "ID", "Un decimal",
"Caja seleccionable", "Lista desplegable",
"Campo texto formateado" };

Class[] tiposColumna = { Integer.class, Double.class, Boolean.class,
JComboBox.class, JFormattedTextField.class };

// constructor de la clase, simplemente pone unos datos en el vector de
// datos.
public MiModelo() {
super(nombresColumna, 0);

// carga unos datos iniciales...
for (int i = 0; i < 10; i++) {

Object[] aux = { i, Math.random(), i % 2 == 0, "Opción A",
"123" };

addRow(aux);

}
}

@Override
public Class getColumnClass(int columnIndex) {
// necesario para que dibuje la tabla con los tipos de columna
return tiposColumna[columnIndex];
}

}

}

También he añadido la captura de eventos del ratón. Al escribir tabla.addMouseListener(new Mouse… podemos usar la combinación de teclas Ctrl + espacio y Eclipse nos intentará autogenerar el código. Ésto mismo se puede usar en cualquier momento, si Eclipse detecta que estás escribiendo algo que conoce te lo pone en un listado o si sabe seguro lo que vas a escribir lo autogenera. Es un comportamiento muy útil.

Explicaciones

He usado un DefaultTableModel que internamente tiene un vector de filas, para poder usar la función addRow() y así simplificar todo un poco que para eso está la clase DefaultTableModel.

La historia de configurar la tabla está en la clase MiModelo, espero haber dejado lo bastante comentado el código como para no explicar de nuevo aquí lo que hace. De todas formas si queda duda, mensaje aquí abajo que lo contesto en cuanto pueda.

Podemos obtener el vector de datos de la forma:

Vector data = modelo.getDataVector();

Hay muchas funciones interesantes que nos permitirán hacer lo que necesitemos. Para hacerse una idea, en mi Eclipse pongo modelo. y se me despliega el listado de funciones que tengo disponibles:

Tenemos la que ya he dicho addRow para añadir una fila, getRowCount que devuelve el número de filas, y muchas más. Algunas funciones necesitan un post entero para explicarlas así que lo dejaré aquí.

Donde pone tabla.addMouseListener(… está todo lo relacionado con el ratón. Podemos programar acciones para cuando se hace click, cuando se aprieta el botón, cuando se libera, etcétera…

Sobre los editores personalizados en una tabla hay que decir que admite cajas chequeables, listas desplegables y campos de texto. Además se pueden crear nuevos editores, como por ejemplo el que cita en la documentación oficial de un editor de celda que nos permite elegir entre una tabla de colores.

Más información

Me remito como siempre a la documentación oficial:

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

De todas formas hay muy buena información en otras páginas web, espero que si has leido éste tutorial por lo menos te haya aclarado algo, o te sirva el código fuente.

No dudes en dejar un mensaje.

Saludos.


Java Swing 9: La madre del cordero, el JTable

2013-05-02 - Categorías: Java / Java Swing

Siguiendo con los minitutoriales de Swing, ha llegado la madre del cordero del manejo de datos. Tarde o temprano necesitamos visualizar, modificar, borrar o guardar datos. Podemos hacer formularios, recorrer tablas guardadas en variables ocultas, usar listas, al final la manera más simple de mostrar muchos de éstos datos es una tabla, que en Swing se llama JTable.

Para seguir éste tutorial hace falta, un entorno de desarrollo (por ejemplo Eclipse), el JDK o el JRE, y un poco de paciencia xD

Si eres un máquina entonces descárgate directamente el código y no te olvides de visitarme de vez en cuando, a ver si aumentan las visitas =)

A saber

Antes de empezar hay que saber que un JTable es un componente Swing, que va a visualizar unos datos que se almacenan internamente en una variable de tipo TableModel. No se recomienda usar directamente pero si no lo necesitamos para qué vamos a complicarnos más la vida en usar otros métodos. Lo he usado para no complicar el ejemplo.

En el ejemplo se va a usar un DefaultTableModel el cual va a guardar referencia del TableModel que tiene la tabla. Entonces cuando se modifica, en éste caso añadiendo más filas, automáticamente la tabla se redibuja y muestra los datos actualizados. Se recomienda usar un AbstractTableModel para manejar los datos pero eso es otro tema.

Comenzando

Gran parte del código se puede generar con Eclipse. Así que los pasos a seguir para emepezar son:

  1. Crear un nuevo proyecto Java.
  2. Añadir un JFrame que genere todo el esqueleto de la ventana.
  3. En el Swing Designer en vista de diseño poner un Absolute Layer que nos permitirá posicionar los elementos donde queramos.
  4. Poner un JScrollPane y dentro de él el JTable, de esta manera si la tabla crece más que lo que vemos apareceran barras de scroll como las de la imagen anterior.
  5. El botón de abajo que meterá contenido en la tabla.

Hecho ésto hago doble click en el botón y me muestra todo el código recién generado listo para seguir implementando.

El código

A continuación el código lo más legible que he podido poner:

package swing;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class JavaSwing9JTable extends JFrame {

// versión
private static final long serialVersionUID = 1L;

// la tabla
private JTable table;

// el modelo de tabla, aquí van a estar los datos.
private DefaultTableModel model;

// función principal
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JavaSwing9JTable frame = new JavaSwing9JTable();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

// constructor del frame que contruye toda la ventana...
public JavaSwing9JTable() {
//título
setTitle("Java Swing 9 El JTable");
// cuando cerramos la ventana se cierra la aplicación por completo
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// dimensiones y posición
setBounds(100, 100, 596, 331);
// establece una capa absoluta para posicionar los elementos donde queramos
getContentPane().setLayout(null);

// el panel con barras de scroll automáticas
JScrollPane scrollPane = new JScrollPane();
// dimensiones y posición del panel de scroll
scrollPane.setBounds(10, 11, 560, 227);

// se añade el panel de scroll a la ventana
getContentPane().add(scrollPane);

// nombre de las columnas
String[] columnNames = { "ID", "Un dato", "Otro dato" };

// creo un modelo de datos, sin datos por eso 'null' y establezco los
// nombres de columna
model = new DefaultTableModel(null, columnNames);
// creo la tabla con el modelo de datos creado
table = new JTable(model);

// se pone la tabla en el scroll
scrollPane.setViewportView(table);

// código del botón
JButton btnAadirLnea = new JButton("Meter contenido");
btnAadirLnea.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {

// aquí se añaden datos a la tabla
for (int i = 0; i < 100; i++) {

// creo un vector con una fila
Object[] aux = { i, i * 34, Math.random() };

// añado la fila al modelo
model.addRow(aux);

}

}
});
// dimensiones y posición del botón
btnAadirLnea.setBounds(10, 249, 267, 23);
// pongo el botón en la ventana
getContentPane().add(btnAadirLnea);

}
}

Descarga del código aquí.

Aclaraciones

Ésta es la forma más simple que he encontrado de usar una tabla de Swing. El paso siguiente es usar un AbstractTableModel, crearnos una clase que la implemente, con la que podemos entonces hacer cosas como meter cajas seleccionables o cuadros desplegables en las filas.

Más información

Hay mucha información en Internet, me remito primero a la documentación oficial, está en inglés y es muy extensa:

http://docs.oracle.com/javase/6/docs/api/javax/swing/JTable.htmlhttp://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Espero que sirva. En próximos posts espero ver cómo controlar los clicks del ratón, esos temas que citaba de la clase AbstractTableModel, formularios maestro-detalle, etcétera…

Saludos!


¿Qué es un Bean de Java?

2013-03-27 - Categorías: Java

Podemos ver por todos lados la palabra Bean, significa vaina en inglés, y lo he leído en los lugares más variopintos. Desde el NetBeans, los Java Beans, los Beans en Visual Studio, Eclipse, los Enterprise Java Beans, los Beans que usamos para acceder y guardar datos de nuestros programas. Pero ¿qué es un Bean?

Continuar leyendo..

SQLite con Java

2013-03-07 - Categorías: General

Hoy les dejo un acceso a una base de datos SQLite, que últimamente está tan de moda. SQLite se usa en todo tipo de programas, es de dominio público, se puede incluir en tu programa añadiendo alguna librería muy ligera, y te da casi todas las funcionalidades que te puede dar cualquier otra BD relacional (de las que usan SQL).

Materiales

  1. Una vez más, mi entorno de desarrollo favorito, el Eclipse que supongo ya instalado. También se puede seguir el post usando otro entorno http://www.eclipse.org/
  2. Una librería hecha por completo en Java para usar SQLite, un tal Taro L. Saito, de Xerial nos deja en su repositorio para descargar en https://bitbucket.org/xerial/sqlite-jdbc/downloads
  3. El JDK instalado http://www.oracle.com/technetwork/java/javase/downloads/index.html 

 Un poco de teoría

Lo que he averiguado en mis investigaciones, más que nada con lo que me han explicado amigos, es que SQLite lo que no tiene son claves ajenas, con lo que la integridad referencial no está implementada dentro de su llamemosle «motor de la BD» es que tenemos integridad referencial, claves ajenas. Se pueden usar disparadores (triggers), cuando se hagan inserciones, modificaciones o borrados. Podemos usar BLOBs, definir los tipos de datos de las tablas, y un largo etcétera…

Según pone en la Wikipedia http://es.wikipedia.org/wiki/SQLite, la versión 3 de SQLite admite archivos de 2 Terabytes con incluso tipos de datos BLOB, con lo que podemos almacenar ficheros dentro de la base de dato. Con ésto creo que tenemos bastante, por lo menos para empezar a trastear las BD sin tener que instalar todo un señor motor de BD como los de Oracle o MS SQL Server, o los que más me gustan a mi como PostgreSQL o Firebird. En Java funcionan todas éstas BD de manera parecida, la idea principal es usar el JDBC que proporciona un estándar de conexión para conexión a bases de datos desde Java.

Manos a la obra

Al grano, después de un poco de teoría, antes de empezar con el código, hay que preparar el proyecto en Eclipse:

  1. Creo un nuevo proyecto de Java.
  2. Copio la librería de SQLite, en el proyecto, Eclipse te deja coger y arrastrar el fichero al Explodor de Proyectos con lo que te proguntará si quieres copiar o hacer un enlace externo al fichero. Prefiero copiarlo dentro del proyecto porqué así siempre estará incluido si es que creamos un ejecutable o nos llevamos el proyecto a otro ordenador.
  3. No basta con copiar la librería, tenemos que agregarla al Build Path del proyecto. Con el botón derecho del ratón en el explorador de proyectos, le damos a Build Path > Configure Build Path… Le damos a Add JAR… y elegimos el fichero que ya está dentro del proyecto. Debes ver una ventana parecida a ésta:

Hecho ésto ya podemos usar la librería desde cualquier clase que creemos dentro de éste proyecto. Entonces ya sí que sí, que empezamos creando una nueva clase, con un main. Yo he usado el generador de código de Eclipse y me ahorro tiempo. Entonces el código de ejemplo con el que se crea un fichero bdpruebas.db, luego dentro crea una tabla llamada tablapruebas, y va insertando valores aleatorios del 1 al 100 con un índice. Queda así:

package SqlitePack;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ProbandoSqlite {

public static void main(String[] args) throws ClassNotFoundException {

Class.forName("org.sqlite.JDBC");

try {

// ESTABLECER LA CONEXIÓN
Connection conexion;
conexion = DriverManager.getConnection("jdbc:sqlite:bdpruebas.db");

// CREAR ENUNCIADO
Statement enunciado;
enunciado = conexion.createStatement();

// CREAR UNA TABLA NUEVA, LA BORRA SI EXISTE
enunciado.execute("DROP TABLE IF EXISTS tablapruebas;");
enunciado.execute("CREATE TABLE tablapruebas (id int primary key, aleatorio int);");

// INSERTAR DATOS
for (int i = 1; i <= 100; i++) {
enunciado.execute("INSERT INTO tablapruebas (id, aleatorio) values ("
+ i
+ ", "
+ Math.floor(Math.random() * 100 + 1) + ");");
}

// CONSULTA DATOS
ResultSet resultados;
resultados = enunciado.executeQuery("SELECT * FROM tablapruebas;");

// PROCESAR EL RESULTADO
while (resultados.next()) {
System.out.println("id " + resultados.getString(1)
+ ": aleatorio " + resultados.getString(2));
}

// CERRAR
resultados.close();
enunciado.close();
conexion.close();

} catch (Exception e) {
System.out.println("ERROR: " + e.getMessage());
}

}

}

Lo que hace el código es crear tres objetos: conexión, enunciado y resultados. Con conexión como su nombre indica, nos conectamos a la base de datos, si el fichero no existe lo crea, ésto es un comportamiento propio de SQLite. Con el enunciado lo que venimos a tener es una especie de «mesa de trabajo» con lo que vamos a atacar la base de datos con todo tipo de consultas o sentencias SQL. Es interesante el PreparedStatement para mejorar el funcionamiento interno de nuestro programa pero eso es otro tema. Luego con el objeto resultados en éste ejemplo lo que se hace es almacenar los resultados de la consulta.

Las sentencias SQL que se han usado lo que hacen es borrar la tabla si existe, la crean y llenan la tabla con los INSERT INTO. La última consulta con el SELECT lo que hace simplemente es listar todos los resultados de la tabla.

Dejo el proyecto en descarga como viene siendo costumbre xD

Descargar

Terminando

Para terminar, si pulsamos F11 en la ventana de consola debemos ver en los resultados algo tal que así:

id 1: aleatorio 4
id 2: aleatorio 70
id 3: aleatorio 94
id 4: aleatorio 40
id 5: aleatorio 86
id 6: aleatorio 40
id 7: aleatorio 89
id 8: aleatorio 80
id 9: aleatorio 79
id 10: aleatorio 14
id 11: aleatorio 69
id 12: aleatorio 2
id 13: aleatorio 12
id 14: aleatorio 62
id 15: aleatorio 74
id 16: aleatorio 53
id 17: aleatorio 45
id 18: aleatorio 44
id 19: aleatorio 56
id 20: aleatorio 40
id 21: aleatorio 81
id 22: aleatorio 75
id 23: aleatorio 97
id 24: aleatorio 78
id 25: aleatorio 63
id 26: aleatorio 30
id 27: aleatorio 13
id 28: aleatorio 21
id 29: aleatorio 68
id 30: aleatorio 58
id 31: aleatorio 25
id 32: aleatorio 92
id 33: aleatorio 88
id 34: aleatorio 77
id 35: aleatorio 38
id 36: aleatorio 45
id 37: aleatorio 18
id 38: aleatorio 47
id 39: aleatorio 60
id 40: aleatorio 51
id 41: aleatorio 90
id 42: aleatorio 90
id 43: aleatorio 96
id 44: aleatorio 34
id 45: aleatorio 47
id 46: aleatorio 89
id 47: aleatorio 97
id 48: aleatorio 58
id 49: aleatorio 78
id 50: aleatorio 49
id 51: aleatorio 23
id 52: aleatorio 82
id 53: aleatorio 12
id 54: aleatorio 92
id 55: aleatorio 51
id 56: aleatorio 99
id 57: aleatorio 56
id 58: aleatorio 9
id 59: aleatorio 14
id 60: aleatorio 1
id 61: aleatorio 4
id 62: aleatorio 80
id 63: aleatorio 80
id 64: aleatorio 97
id 65: aleatorio 89
id 66: aleatorio 47
id 67: aleatorio 3
id 68: aleatorio 73
id 69: aleatorio 34
id 70: aleatorio 99
id 71: aleatorio 22
id 72: aleatorio 38
id 73: aleatorio 69
id 74: aleatorio 22
id 75: aleatorio 6
id 76: aleatorio 97
id 77: aleatorio 28
id 78: aleatorio 47
id 79: aleatorio 21
id 80: aleatorio 50
id 81: aleatorio 89
id 82: aleatorio 22
id 83: aleatorio 71
id 84: aleatorio 98
id 85: aleatorio 45
id 86: aleatorio 20
id 87: aleatorio 12
id 88: aleatorio 29
id 89: aleatorio 75
id 90: aleatorio 11
id 91: aleatorio 54
id 92: aleatorio 24
id 93: aleatorio 86
id 94: aleatorio 89
id 95: aleatorio 90
id 96: aleatorio 39
id 97: aleatorio 34
id 98: aleatorio 1
id 99: aleatorio 37
id 100: aleatorio 66

Ya les dejo con ésto, espero que a alguien le sirva, un saludo.

© 2022 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.