domingo, 25 de noviembre de 2012

Aprender a programar en java

Hosting

Saludos, ésto es un intento de mostrar una lista de documentos que nos servirá para iniciar en el mundo de la programación en Java, en la medida de lo posible agregaré algunas más que me hacen falta.

Acepto sugerencias por medio de comentarios.

                                       

Aprenda Java como si estuviera en primero - Tecnun
Java basico con ejemplos
Aprendiendo Java y Programación Orientada a Objetos
Material en html para aprender Java
Construcción de Software Java con Patrones de Diseño

Como programar en java






miércoles, 14 de noviembre de 2012

Búsqueda binaria en un arreglo usando Java


Saludos,




Antes de iniciar con la explicación  hagamos un ejercicio mental, imaginemos que un amigo desea que adivinemos un número que tiene en un papel anotado y que solo él conoce, antes que empecemos nos advierte que el número está comprendido del 0 al 100, y por último por cada intento que hagamos el nos dirá si el número es mayor, menor o igual al número que tiene anotado en el papel.

Digamos que el número secreto a adivinar es el 81.
Bueno si eres sistemático empezaras intentando con el 50.
[1,2,3,.......,58,59,50,51,52,.......,98,99,100]
Tu amigo te dirá que el número que deseas adivinar es mayor que 50.
A éste punto ya debes deducir que el número está entre el 51 y el 100.
Observa como ya no tienes que gastar intentos con los números comprendidos de 0 a 50.

Ahora intentemos con el 75.
[51,52,53,.......,73,74,75,76,77,.......,98,99,100]
Tu amigo te dirá que el número que deseas adivinar es mayor que el 75.
A éste punto ya debes deducir que el número está entre el 76 y el 100.
Observa como ya no tienes que gastar intentos con los números comprendidos de 0 a 75.

Ahora intentemos con el 87.
[76,77,78,.......,85,86,87,88,89,.......,98,99,100]
Tu amigo te dirá que el número que deseas adivinar es menor que el 87.
A éste punto ya debes deducir que el número está entre el 76 y el 86.
Observa como ya no tienes que gastar intentos con los números comprendidos de 0 a 75 y 87 a 100.

Ahora intentemos con el 81.
[76,77,78,79,80,81,82,83,84,85,86]
Tu amigo te dirá que has acertado.



Si te has fijado, la técnica para adivinar el número es dividiendo el rango en dos partes, si el número a adivinar es mayor tomamos el rango que nos ha quedado a la derecha sino si el número a adivinar es menor tomamos el rango que nos ha quedado a la izquierda sino si el número es igual al número a adivinar, bingo hemos adivinado; si la primera vez no adivinamos el número realizamos los pasos anteriores nuevamente hasta que adivinemos (asumiendo que el número a adivinar existe).

La técnica anteriormente descrita es análoga a la técnica para la búsqueda binaria.
Como podemos observar y asumiendo la analogía, uno de los requisitos para el algoritmo de búsqueda binaria es que los datos esten previamente ordenados.
Este algoritmo se utiliza cuando el vector en el que queremos determinar la existencia de un elemento está previamente ordenado. El algoritmo reduce el tiempo de búsqueda considerablemente, ya que disminuye exponencialmente el número de iteraciones necesarias (wikipedia).

Para implementar este algoritmo se compara el elemento a buscar con un elemento cualquiera del array (normalmente el elemento central): si el valor de éste es mayor que el del elemento buscado se repite el procedimiento en la parte del array que va desde el inicio de éste hasta el elemento tomado, en caso contrario se toma la parte del array que va desde el elemento tomado hasta el final. De esta manera obtenemos intervalos cada vez más pequeños, hasta que se obtenga un intervalo indivisible. Si el elemento no se encuentra dentro de este último entonces se deduce que el elemento buscado no se encuentra en todo el array (wikipedia).

He aquí el código que les ofrezco.




class BusquedaBinaria{
 /**
 * Busca un valor numerico dentro de un arreglo numerico...
 * previamente ordenado usando el metodo de busqueda binaria 
 * 
 * @param arreglo con los elementos; dato a buscar
 * @return posicion del elemento buscado, en caso de no existir retorna -1
    */
 public static int busquedaBinaria(int  vector[], int dato){
  int n = vector.length;
  int centro,inf=0,sup=n-1;
   while(inf<=sup){
     centro=(sup+inf)/2;
     if(vector[centro]==dato) return centro;
     else if(dato < vector [centro] ){
        sup=centro-1;
     }
     else {
       inf=centro+1;
     }
   }
   return -1;
 }

 public static void main(String []args){
  int[]vector ={1,4,7,8,9,14,23,47,56,60,61,63,65,66,68,69,70,73,76,77,79,80,82};
  int valorBuscado = 70;
  System.out.println(busquedaBinaria(vector,valorBuscado));
 }
}



domingo, 21 de octubre de 2012

Búsqueda secuencial en un arreglo usando Java


Tal vez también te interese Búsqueda binaria en un arreglo usando Java

Saludos a todos.

Antes de iniciar, debemos familiarizarnos con el concepto de arreglo, he aquí la definición por Wikipedia:

Arreglo: Es una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo.

Para efectos de ésta explicación visualice el arreglo como una serie de cajas unidas donde podemos almacenar datos del mismo tipo, los arreglos están indexados con una serie de números de van de menor a mayor y que sirven para hacer referencia a cada uno de las cajas dentro del arreglo, en java esta indices comienzan en 0.



Los arreglos y en general las estructuras de datos nos permiten almacenar informacion o datos, pero ahora nos seria de utilidad hallar la forma de encontrar los datos que almacenamos en las mismas, para tal fin se han diseñados algoritmo de búsquedas.

Como el titulo lo sugiere trataremos el método de búsqueda secuencial.

Los dos elementos fundamentales a tener en cuentas son: un arreglo con datos objeto de la búsqueda y un elemento o criterio de búsqueda.



El método de búsqueda secuencial consiste en ir comparando el elemento o criterio de búsqueda con cada uno de los elementos en el arreglo, esto se hace recorriendo el arreglo y deteniéndose en cada elemento y hacer la comparación, en caso de ser verdadera la comparación, guardar la posición el elemento o dato.

He aquí el código:

public  int busquedaSecuencial(int []arreglo,int dato){
 int posicion = -1;
  for(int i = 0; i < arreglo.length; i++){//recorremos todo el arreglo
      if(arreglo[i] == dato){//comparamos el elemento en el arreglo con el buscado
    posicion = i;//Si es verdadero guardamos la posicion
    break;//Para el ciclo
   }
 }
 return posicion;
}
Este método nos halla la posición del elemento o dato buscado pero en su primero coincidencia, si queremos que nos halle la posición de la ultima coincidencia, lo único que tenemos que hacer es eliminar la linea donde aparece 'break'.
Si el resultado del método anterior es -1, significa que el elemento no se encuentra en el arreglo.
Ahora cabe la pregunta, ¿y si el elemento que deseo buscar aparece varias veces en el arreglo y yo deseo conocer cada una de estas posiciones, como hago?
Lo que hacemos es deshacernos de la linea 'break' para que el vector sea recorrido en su totalidad, y de alguna forma ir almacenando cada una de las posiciones resultantes de las comparaciones verdaderas.
He aquí el código:

public String busquedaSecuencial2(int []arreglo,int valor){
 String posicion = "";
  for(int i = 0; i < arreglo.length; i++){
   if(arreglo[i] == valor){
    posicion += i+",";    
   }
  }
 return posicion;
}
Aunque pude haber usado un 'ArrayList' o 'Vector' preferí usar un 'String' porque asumo que el lector de éste articulo está mas familiarizado con esta ultima que con los dos primeros términos.
Como siempre esperando que lo escrito les sea de utilidad.



miércoles, 11 de julio de 2012

Aplicacion de mapas, usando grafos y Dijkstra





Saludos a todos,


He mostrado algunas cosas hechas con grafos en éste blogger, y particularmente como aplicar el Algoritmo de Dijkstra en dicho grafo; pero cabe anotar que tiene mucha utilidad en muchas cosas, sobre todo aquellas que tiene que ver con redes.

En una oportunidad hice una pequeña aplicación donde hago uso de la red vial de mi país Colombia (No terminé de pintarlas todas), para hallar rutas cortas entre poblaciones, haciendo uso de nodos, vias y peajes.

He aquí algunas imágenes







He aquí un vídeo.




Los detalles de la implementacion despues con mas tiempo la dare a conocer.

Como siempre link para descargar ejecutable.




sábado, 2 de junio de 2012

Explicación gráfica sobre el Algoritmo de Dijkstra





Tal vez te interese tambien "Imprementacion de un grafo, recorrido en profundidad y anchura", "Implementacion en Java del Algoritmo de Dijkstra", "Aplicacion de mapas, usando grafos y Dijkstra"


Saludos,

Escribí algo para ustedes donde explico de manera grafica y paso a paso como aplicar el algoritmo de dijkstra a un grafo, espero les guste y les sirva.

Espero comentarios al final.







miércoles, 30 de mayo de 2012

Implementacion en Java del Algoritmo de Dijkstra





Hoy trataré el tema Algoritmo de Dijkstra, tema perteneciente a la teoría de grafos, así que para entender esto debemos repasar primero que es un grafo y los términos que giran alrededor es este, como costumbre más abajo pueden descargar código fuente y ejecutable, adicional en ésta entrada podrán encontrar mi explicación gráfica y paso a paso del Algoritmo de Dijkstra en PDF para que puedan descargar a sus computadores.

Definición de Algoritmo de Dijkstra: El algoritmo de Dijkstra, también llamado algoritmo de caminos mínimos, es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vértices en un grafo con pesos en cada arista. Su nombre se refiere a Edsger Dijkstra, quien lo describió por primera vez en 1959.

La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten del vértice origen y que llevan a todos los demás vértices; cuando se obtiene el camino más corto desde el vértice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. (Tomado de Wikipedia).

En palabras propias puedo decir que Algoritmo de Dijkstra nos sirve para determinar el camino mas corto entre dos nodos dados que pertenecen a un grafo.




Algoritmo dijkstra
Clic aqui para descargar 
View more documents from Rey Salcedo

Me tome la tarea de crear una modesta aplicación que me permita graficar un grafo con pesos y determinar la ruta mas corta entre dos nodos dados, he aqui un patallazo:


El funcionamiento es bastante simple:

  • Para crear nodo o vértice con clic izquierdo sobre la superficie, luego te pedirá un nombre.
  • Para crear aristas, hacer clic izquierdo sobre los nodos o vértices que deseamos unir, luego nos pedirá el peso que debera ser un entero positivo. 
  • Para conocer la ruta mas corta por Dijkstra, hacemos clic derecho sobre el primer nodo y luego clic derecho sobre el segundo nodo.

Adjunto ejecutable, y como siempre esperando serles de utilidad.


Pagar codigo fuente





domingo, 13 de mayo de 2012

Generar números aleatorios sin repetirse en java (usando Math.random)





Saludos a todos,

Este problema me llega a causa de otro problema que estoy solucionando y que posteriormente publicare aquí.

Se trata de generar números aleatorios en java dado un numero inicial y uno final pero con la condición de no repetirse; por ejemplo

numero inicial = 3
numero final = 7

La salida puede ser algo así [6,7,4,5,3]

La forma particular en que lo resuelvo es ir llenando una lista con los numero que voy generando y para así tener una referencia y no repetirlos.

Antes de empezar con el algoritmo tengo que tener en cuenta cuantos numeros como maximo debo generar asi seria (numeroInicial - numeroFinal) + 1; usando el ejemplo anterior quedaría que la máxima cantidad de numero que generare sera (7 - 3) + 1 = 5

El algoritmo para generar un sera así:

1. Si el tamaño de la lista es menor que ((numeroInicial - numeroFinal) + 1) sigo al paso 2, sino al paso 3.

2. Genero un numero aleatorio establecido dentro del rango y sigo al paso 3.

3. Si la lista esta vacía sigo al paso 4 sino al paso 5

4. Adjunto el numero a la lista y sigo al paso 6.

5 Como no esta vacía la lista verifico, si el numero generado esta en la lista regreso al paso 1, sino regreso al paso 4

6. Muestro el numero generado, sigo al paso 7.

7. Fin


Hosting

Codigo:

//Por Rey Salcedo
import java.util.ArrayList;
public class NumeroAleatorios {
  private int valorInicial;
  private int valorFinal;
  private ArrayList listaNumero;

  public NumeroAleatorios(int valorInicial, int valorFinal){
    this.valorInicial = valorInicial;
    this.valorFinal = valorFinal;
    listaNumero = new ArrayList();
  }
    
  private int numeroAleatorio(){
    return (int)(Math.random()*(valorFinal-valorInicial+1)+valorInicial);
  }
    
  public int generar(){
   if(listaNumero.size() < (valorFinal - valorInicial) +1){
   //Aun no se han generado todos los numeros
      int numero = numeroAleatorio();//genero un numero
      if(listaNumero.isEmpty()){//si la lista esta vacia
        listaNumero.add(numero);
        return numero;
      }else{//si no esta vacia
        if(listaNumero.contains(numero)){//Si el numero que generé esta contenido en la lista
          return generar();//recursivamente lo mando a generar otra vez
        }else{//Si no esta contenido en la lista
          listaNumero.add(numero);
          return numero;
        }
      }
   }else{// ya se generaron todos los numeros
     return -1;
   }
  }
}




public class Ejemplo{
 public static void main(String[] args){
 //Generando números aleatorios del 3 al 7 sin repetirse
  NumeroAleatorios na = new NumeroAleatorios(3,7);   
  for(int i = 0; i < 5;i++){
    System.out.print(na.generar()+",");
  }
 }
}

Nota: si forzar a generar mas numero de los que debería generar te retornara un -1, que te indicará que ya se generaron todos los números posibles.  

Clic aquí para descargar código Ejemplo.java.

Clic aquí para descargar código NumeroAleatorios.java.

Como siempre, espero les guste y les sirva; comenten cualquier duda o sugerencia.



sábado, 28 de abril de 2012

Conectar a base de datos de Zoho usando Java





Saludos,

Esta vez haremos una conexion de una base de datos que tendremos en la nube, el servicios nos la ofrecerá Zoho, para los que no saben que es una base de datos en la nube usando Zoho, pondre una explicación auspiciada por Wikipedia.

Zoho es el nombre de un conjunto de aplicaciones web desarrolladas por la empresa estadounidense AdventNet. Para poder utilizar dichas herramientas es obligatorio registrarse y la gran mayoría son de caracter gratuito, aunque muchas de las herramientas se encuentran todavía en fase beta. para mas informacion clic aqui

Lo primero que necesitaremos será tener una base de datos en la nube de Zoho, para esto nos registraremos en la la pagina oficial de la misma http://www.zoho.com/

Una vez registrado, en el panel principal hacemos clic en el link Reports como lo muestra el siguiente pantallazo:



Aquí podemos crear nuestra base de datos y las tablas que esta contendrá.

Lo siguiente que necesitaremos es algo que ellos llaman API key, que es una cadena compuesta de letras, signos y números; para crear nuestra API key que necesitaremos para hacer la conexión de nuestra aplicación de escritorio con la base de datos que está en la nube debemos ingresar como usuario a la pagina de Zoho luego hacemos clic en el siguiente Link.

Pasamos a descargar los Driver que necesitaremos para conectar nuestra aplicación Java, estos Driver, controladores o JDBC que nos los proporciona Zoho por medio de este Link.

Para esta practica usaremos Netbeans (puede ser cualquier otro editor), creamos un proyecto (yo lo llame zoho), los Driver que descargamos en el parrafo anterior lo descomprimirmos y nos ubicamos en la siguiente ruta Zoho/CloudSQLJDBCDriver/lib que esta dentro de la carpeta que acabamos de descomprirmir valga la redundancia; alli observamos seis archivos de extencion .jar.

Los seis archivos .jar antes mensionados los adjuntamos a la libreria de nuestro proyecto haciendo clic derecho sobre Libraries y Add JAR/Foolder como lo muestro en la siguiente imagen:




Nos ubicamos donde tenemos nuestro seis .jar (Zoho/CloudSQLJDBCDriver/lib) y los adjuntamos todos; Nos debe quedar algo así:




Listo, ahora colocaremos el código que nos mostrara la información que tenemos en la base de datos que esta en la nube (si no tenemos información o datos colocamos cualquier cosa con tal de ver que todo ha salido bien), La clase de llamara Sample, que es una modificacion de la que esta de ejemplo en los driver que descargamos salvo que coloque una linea indispensable que no tenia y que no me permitía hacer la conexión.



//$Id$
package zoho;
import java.util.*;
import java.sql.*;
import java.net.URLEncoder;

public class Sample{
 //Configure these vars
 private static final String APIKEY= "";//your key
 private static final String USER = "";//your user name
 private static final String PASSWORD = "";//your password
 /*
 private static final String PROXYSERVER=;
 private static final String PROXYPORT="80";    
 private static final String PROXYUSERNAME=;    
 private static final String PROXYPASSWORD=;    
 */
    
 private static final String DB_NAME= "";//your db name
 private static final String TABLE_NAME="";//your table name

 public static void main(String args[])   throws Exception{
  if (APIKEY.length() == 0){
   throw new RuntimeException("Open this file and configure the variables");
  }
  Connection conn = null;
  Statement stmt = null;
  ResultSet rs = null;
      
  DatabaseMetaData dmd = null;
       
  try{
   Class.forName("com.zoho.cloudsql.jdbc.ZohoReportsDriver");
   Properties conProps = new Properties();
   conProps.put("ZOHO_API_KEY",APIKEY);
   conProps.put("user",USER); 
   conProps.put("password",PASSWORD); 
   /*
   conProps.put("PROXYSERVER",PROXYSERVER); 
   conProps.put("PROXYPORT",PROXYPORT); 
   conProps.put("PROXYUSERNAME",PROXYUSERNAME); 
   conProps.put("PROXYPASSWORD",PROXYPASSWORD); 
   */
   conn = DriverManager.getConnection("https://reportsapi.zoho.com/api"// No I18N
                                        + "/" + URLEncoder.encode(USER,"UTF-8")
                                        + "/" + URLEncoder.encode(DB_NAME,"UTF-8"),
                                        conProps);
   String sql = "select * from " + TABLE_NAME + " limit 5";
            
   stmt = conn.createStatement();
            
   rs = stmt.executeQuery(sql);
   ResultSetMetaData rsmd = rs.getMetaData();
    
   while (rs.next()){
    System.out.println("\n");
    for(int i = 1;i <= rsmd.getColumnCount();i++){
     System.out.print(rs.getObject(i));
     System.out.print("\t");
    }
   }
  }finally{
    if (rs!= null){try { rs.close(); } catch (Exception e){ e.printStackTrace();}}
    if (rs!= null){try { stmt.close(); } catch (Exception e){ e.printStackTrace();}}
    if (rs!= null){try { conn.close(); } catch (Exception e){ e.printStackTrace();}}
  }
 }
}
En la variable APIKEY se coloca el AP IKEY que generamos anteriormente y que ya detalle.
En las variables USER, PASSWORD colocamos el usuario y contraseña que usamos para crear nuestro login el la pagina de Zoho.
Por ultimo las variables DB_NAME, TABLE_NAME son el nombre de la base de datos y la tabla que creastes en la nube de Zoho y que consultaras con la aplicación. --------------------------------------------------------------------------------------------------------- Por ultimo les dejo una modestas aplicación de escritorio hecha en Java para conectarse con una base de datos en la nube Zoho:


Como siempre, deseando serles de ayuda. Clic aquí para descargar aplicación..



jueves, 29 de marzo de 2012

Tutorial de Jtable (Operaciones sobre un Jtable)





Definición: Jtable es una clase que me permite organizar una determinada información en tabla, esta difiere de una base de datos normal porque al utilizar Jtable tu puedes visualizar esta tabla brindándole a el usuario organización de información, oportunidades de editar y cambiar el tamaño de las columna entre otras.

A continuación adjunto un materia en pdf aportado por Isaac Ruíz, montado en http://www.javahispano.org. que considero que todos los interesados en aprender a programar en Java deberíamos leer, y asi nos ahorrariamos muchos dolores de cabeza.

Como siempre deseando que el material les sea de gran utilidad.


Clic aquí para descargar material.



Sumando dos matrices regulares en Java





public class SumarMatriz{
 //Sumaremos dos matrices regulares de 5 X 5;
 public static void main(String []args){
  //creando y llenando nuestras dos matrices implicitamente.
  int [][]matriz1 = {{4,6,8,5,2},{4,9,8,7,2},
                    {6,5,4,20,8},{4,6,9,1,2},{4,7,8,5,1}};
  int [][]matriz2 = {{5,6,9,45,44},{1,4,25,3,9},
                    {7,8,45,6,32},{7,9,6,32,5},{4,5,8,6,3}};
  int [][]resultado = new int[5][5];//aqui guardaremos el resultado.
  /*la matriz resultado no es necesaria para mostrar el resultado
  ...pero aun asi la usaremos*/
  for(int filas = 0;filas < 5;filas++){
   for(int columnas = 0;columnas < 5;columnas++){
    //aqui las estamos sumando...
    resultado[filas][columnas] = matriz1[filas][columnas] + matriz2[filas][columnas];
   }
  }
  for(int filas=0;filas < 5;filas++){
   for(int columnas = 0;columnas < 5;columnas++){
    //aqui estamos imprimiendo la matriz resultado
    System.out.print(resultado[filas][columnas]+",");
   }
   System.out.println();//damos enter entre filas
  }
 }
}



Buscando en una matriz en Java





import java.util.Scanner;
public class BuscarEnMatriz{
 /*Llenaremos una matriz 10 X 10
   con numeros aleatorios del 1 al 100
   y buscaremos un valor dentro
   de la misma*/
 public static void main(String []args){
  Scanner in = new Scanner(System.in);
  int matriz[][]=new int[10][10];
  //llenamos nuestra matriz
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    matriz[filas][columnas]=1+(int)(Math.random()*100);;
   }
  }
System.out.println();//damos un enter
System.out.println("---Esta es nuestra matriz");
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    System.out.print(matriz[filas][columnas]+",");
   }
   System.out.println();//damos un enter
  }
System.out.println("---Digite un valor a buscar---");
int buscar = in.nextInt();
String coordenadas="";
//La busqueda es de manera iterativa
  for(int filas=0;filas < matriz.length;filas++){
   for(int columnas=0;columnas < matriz[filas].length;columnas++){
    if(matriz[filas][columnas]==buscar){
     coordenadas+="["+filas+","+columnas+"]"+"\n";
     //'\n' me permite dar enter's(saltos de linea) dentro de la cadena;
    }
   }
  }

  if(coordenadas.equals("")){
   System.out.println("El valor "+buscar+" no existe en la matriz--");
  }else{
   System.out.println("El valor "+buscar+" esta en la(s) siguiente(s) coordenadas.");
   System.out.print(coordenadas);
  }
 }
}



Escribiendo y leyendo en un archivo.





import java.io.*;//necesario para trabajar sobre archivos
public class Archivo{
 public static void escribirArchivo(String nombre,String linea){
  //nombre es la ruta y nombre del archivo sobre el que deseamos trabajar
  //linea es la cadena que deseamos introducir en nuestro archivo
  File archivo = new File(nombre);
    try {
      FileWriter escribirArchivo = new FileWriter(archivo, true);
      //true para no modificar lo que ya estaba en el archivo, false para hacer lo contrario
      BufferedWriter buffer = new BufferedWriter(escribirArchivo);
      buffer.write(linea);
      buffer.newLine();
      buffer.close();//buena practica cerrar para liberar memoria
    }
    catch (Exception ex) {
      System.out.println("Error:"+ex);
     //En caso de haber error aqui se mostrará;
    }
 }
 public static String leerArchivo(String nombre){
  //nombre es la ruta y nombre del archivo sobre el que deseamos trabajar
  String retornado="";
  String linea="";
  File archivo = new File(nombre);
    try {
      FileReader leerArchivo = new FileReader(archivo);
      BufferedReader buffer = new BufferedReader(leerArchivo);
      while ((linea = buffer.readLine()) != null) {
        retornado+=linea+"\n";
      }
      buffer.close();
    }
    catch (Exception ex){
      System.out.println("Error:"+ex);/*en caso de haber error aqui se mostrará;
      aunque puedes mostrarlo con una ventana emergente o como quieras*/
    }
   return retornado;
 }
 public static void main(String args[]){
  escribirArchivo("/home/rey/Escritorio/MiArchivo.txt","Primer linea");
  /*
   *La estructura de la ruta '/home/...' es porque trabajo en linux...
   *pero si es en windows es algo asi como 'c/...'
  */
  escribirArchivo("/home/rey/Escritorio/MiArchivo.txt","Segunda linea");
  escribirArchivo("/home/rey/Escritorio/MiArchivo.txt","Tercera linea");
  //procedemos a leer directamente del archivo que hemos creado
  System.out.println(leerArchivo("/home/rey/Escritorio/MiArchivo.txt"));
 }
}



sábado, 24 de marzo de 2012

SQLite, Java y un ejemplo practico.





Al final Link para descargar código fuente.

Voy a  un ejemplo practico de como construir una simple aplicación haciendo uso de la seudobase de datos llamada SQLite usando java, donde tomare los datos de una persona (id, primer nombre, segundo nombre, primer apellido, segundo apellido) y los guardare en la tabla Persona de la base de datos, luego los mostraré en una JTable y por ultimo eliminaré todos los elementos de la tabla persona.

Lo curioso y practico de SQLite es que usa una base de datos en forma de archivo y puede hacer consultas en ella desde una aplicación java haciendo uso de SQL y ademas no es necesario instalar un motor de base de datos como PostgreSQL por ejemplo.

Definicion de SQLite: Es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente pequeña (~275 kiB)2 biblioteca escrita en C. SQLite es un proyecto de dominio público1 creado por D. Richard Hipp. mas informacion aqui.

Como nota importante -por lo menos para nosotros- esta herramienta está disponible para Java, cabe anotar que es usada por muchos software's actualmente.

Usaremos como herramientas Netbeans, Sqliteman y SqliteJDBC para Java, todo sobre GNU/Ubuntu, pero de igual forma lo podemos hacer en Windonws ya Sqliteman esta disponible para este.

Definición de JDBC: es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que se utilice.

Definicion de SqlitemanUna excelente herramienta GUI para desarrolladores y administradores de bases de datos Sqlite disponible en múltiples plataformas.

Para la instalación de Sqliteman en Linux es muy fácil, ya que está presente en los repositorios de la mayoría de distribuciones, por ejemplo en GNU/Ubuntu lo podemos encontrar en 'Centro de software de Ubuntu'.

Para los que usan Windonws aquí esta el instalador de Sqliteman, clic aqui para descargar.

Para descargar el SqliteJDBC para Java, clic aqui para descargar.

Hosting
Hasta aqui asumo que tenemos conocimiento al menos básico del uso de Administradores de base de datos tradicionales como PostgreSQL, MySQL, entre otros.

Crearemos una base de datos usando Sqliteman llamada 'registro.db' muy sencilla compuesta por una tabla llamada 'Persona', así:


CREATE TABLE "Persona" (
    "id" INTEGER PRIMARY KEY,
    "primer_nombre" TEXT NOT NULL,
    "segundo_nombre" TEXT,
    "primer_apellido" TEXT NOT NULL,
    "segundo_apellido" TEXT
)


Lo que nos queda algo así:


-----------------------------------------------------------------
En Netbeans he creado un proyecto llamado ''ProyectoSQLite", y dentro tres paquetes, Operaciones, Objetos y Ventanas. 

En el paquete Operaciones (el paquete mas importante) existen dos clases, Conexion.java y Operaciones. java

En la clase Conexion.java tenemos el constructor y en ella inicializamos la variable ruta con la ruta donde se encuentra nuestro archivo base de datos.

public Conexion(){
 ruta = "/home/taniao/Escritorio/registro.db";
}

Nota: siempre debemos usar en la ruta '/' ya sea que estemos en Linux o Windows.

Finalmente para ésta clase tenemos el método conectar que como su nombre lo indica nos permitirá abrir conexión con la base de datos cada vez que la necesitemos.

try {
  Class.forName("org.sqlite.JDBC");
 }catch (ClassNotFoundException e) {
   JOptionPane.showMessageDialog(null, e.getMessage());
 }  
  try {
   conexion = DriverManager.getConnection("jdbc:sqlite:"+ruta);
   consulta = conexion.createStatement();
  }catch (SQLException e) {
  JOptionPane.showMessageDialog(null, e.getMessage());
  }
}





Por otra parte en la clase Operaciones.java tenemos dos importantes métodos, insertar y consultar; al ser básicos nos permitirán desarrollar muchas más funcionalidades en la clase Operaciones.java; para efectos de ésta pequeña explicación solo almacenaremos Personas y mostraremos un listado de las misma.

public boolean insertar(String sql){
 boolean valor = true;
  conectar();
  try {
   consulta.executeUpdate(sql);
  } catch (SQLException e) {
   valor = false;
   JOptionPane.showMessageDialog(null, e.getMessage());
  }      
  finally{  
   try{    
    consulta.close();  
    conexion.close();  
   }catch (Exception e){                 
     e.printStackTrace();  
   }  
  }
  return valor;
}

public ResultSet consultar(String sql){
 conectar();
 ResultSet resultado = null;
 try {
  resultado = consulta.executeQuery(sql);
 }catch (SQLException e) {
  JOptionPane.showMessageDialog(null, ""+e.getMessage());
 }
  return resultado;
}

----------------------------------------------
Para terminar y para que todo funcione necesitamos el JDBC llamado sqlitejdbc-v056.jar que ya descargamos (si no es aquí esta de nuevo el Link) para podernos comunicar con la base de datos.

Descomprimimos sqlitejdbc-v056.jar y dentro de éste encontramos una carpeta llamada 'org', allí es donde está toda la implementacion de sqlite; copiamos esta carpeta a nuestro proyecto junto con los tres paquete que hemos creados (OperacionesObjetos y Ventanas) y listo.

Nota: Si no queremos hacer el paso anterior podemos importar toda la librería sqlitejdbc-v056.jar usando Netbeans.
----------------------------------------------
He aquí pantallazos de la aplicación.





Como siempre deseándoles les sea de utilidad.

Para descargar codigo fuente hecho en Netbeans, clic aqui.
Para descargar la base de datos hecha en Sqliteman, clic aqui.

Hosting

Comenta acerca del código.

Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...