Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Base de Datos / Java / Proyectos / base de datos multiple – parte II

base de datos multiple – parte II

Autor jc mouse sábado, abril 20, 2013

Continuación del tutorial «Utiliza 2 bases de datos diferentes en una aplicación»

La Interfaz

frmSelected.java: Haciendo uso de la paleta de controles, crea una interfaz como la imagen inferior:

access java

Los controles marcados con un punto rojo, son importantes y debes renombrarlos tal cual se ve en la imagen.

Nuestra aplicación hará uso de dos SGBD, entonces deben agregarse esas opciones al JComboBox en su propiedad «model«, los valores «Access» y «SQLite»

frmData: Esta interfaz nos sirve para mostrar los registros de la base de datos seleccionada (Access o SQLite), los nombres de los controles son importantes.

interfaz 2

La clase conexión Access/SQLite

Como se dijo el principio, necesitamos de una clase que nos conecte ya sea a Access o SQLite según la opción del usuario, ademas necesitamos que esta misma clase, realice consultas a ambas base de datos, respetando su propia sintaxis SQL.

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class ConexionDB {

    //Variable para guardar que tipo de base de datos se esta utilizando
    private String modo="";    
    /** Base de datos SQLite */
    private String dbNameSQLite="oops.sqlite";
    /** Base de datos Access */    
    private String password = "";    
    private String dbNameAcces = "oops.accdb";
    /** Dirección completa del JAR */
    //private String path = System.getProperty("user.dir") + "\\" ; // descomentar para crear el *.JAR
    private String path = "C:\\Users\\obama\\Documents\\NetbeansProjects\\dbDouble\\" ; //ruta del proyecto netbeans

    private Connection connection = null;

    /**
 * Constructor de clase
 * @param opcion de tipo String
 * valores:
 * "Access" 
 * "SQLite"
 */
    public ConexionDB( String opcion )
    {
        if( opcion.equals("Access") )
        {
            try{
                //obtenemos el driver para Access 
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                //obtenemos la conexión 
                connection = DriverManager.getConnection( "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=" + path + dbNameAcces + ";PWD=" +   password );                          
          }catch(SQLException e){
             System.err.println( e.getMessage() );
          }catch(ClassNotFoundException e){
             System.err.println( e.getMessage() );
          }
        }
        else if( opcion.equals("SQLite"))
        {
            try{
                Class.forName("org.sqlite.JDBC");
                connection = DriverManager.getConnection("jdbc:sqlite:" + path + dbNameSQLite );            
            }catch(Exception e){
                 System.err.println( "Error: " + e.getMessage() );
            }
        }
        else //El sistema termina
        {
            JOptionPane.showMessageDialog(null,"Error: Base de Datos no existe");
            System.exit(0);
        }
        modo = opcion ;
    }

    /**
 * Retorna el tipo de base de datos que se esta utilizando
 * @return String valor de variable "Modo"
 */
    public String getModo()
    {
        return this.modo;
    }

    /**
 * Metodo que obtiene el registro de una frase celebre aleatoriamente
 * @return Map
 */
    public Map Obtener_Frase_Celebre()
    {
        String sql="";
        Map data = new HashMap();
        if( this.modo.equals("Access")) //Consulta SQL para Access
        {            
            sql = " SELECT TOP 1 texto, autor FROM frases ORDER BY Rnd( id * Timer() * 1000 ) ";
        }
        else if( this.modo.equals("SQLite") ) //Consulta SQL para SQLite
        {
            sql = " SELECT texto, autor FROM frases ORDER BY RANDOM() LIMIT 1; ";
        }        

        try{
           PreparedStatement pstm = this.connection.prepareStatement( sql );
           ResultSet res = pstm.executeQuery();
           while(res.next()){
              data.put( "texto" , res.getString("texto") );
              data.put( "autor" , res.getString("autor") );
           }
           res.close();
        }catch(SQLException e){
           System.err.println( "Error SQL: " +  e.getMessage() );
        }
        return data;
    }

}//--> fin clase

Observamos en la clase anterior «ConexionDB.java«, que se deben indicar parámetros para cada Base de Datos, SQLite no hace uso de contraseña pero Access si, así también cuando se realiza la conexión a las bases de datos, se debe usar su driver respectivo.

En el método de consulta «Obtener_Frase_Celebre()» vemos que según la opción «Access» o «SQLite», la instrucción SQL varia un poco, ambas instrucciones hacen lo mismo pero cada lenguaje tiene sus diferencias, esto no solo ocurre en la sintaxis, sino también en la forma en que se manejan internamente los datos, por ejemplo los campos de tipo FECHA.

Vamos a unir todo

Para terminar este tutorial, debemos implementar la clase conexiónDB.java en la interfaz de usuario.

frmSelected.java : En este JFrame, declaramos las variables:

    private ConexionDB conexion;
    frmData Data = new frmData();

En los botones btnEntrar y btnSalir se coloca el código:

    private void btnEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        this.conexion = new ConexionDB( this.jcOpcion.getSelectedItem().toString() ); // se realiza la conexión
        Data.setConexion(conexion); // 
        Data.iniciar(); // se cargan los datos en el JFrame
        this.dispose(); // se cierra JFrame actual
        Data.setVisible(true); // Se muestra JFrame con los datos
    }                                         

    private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {
        System.exit(0);
    }

frmData: EL código del JFrame debe quedar de esta forma:

import java.util.Map;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class frmData extends javax.swing.JFrame {

    private ConexionDB conexion;

    /**
 * Creates new form frmData
 */
    public frmData() {
        initComponents();
        this.setLocationRelativeTo(null);
        this.setTitle("Frases Celebres");
    }

    /**
 * conexion a base de datos
 * @param con de tipo ConexionDB
 */
    public void setConexion( ConexionDB con )
    {
        this.conexion = con;
    }

    /**
 * obtiene registro de base de datos y asiga a controles
 */
    public void iniciar()
    {
        this.txtDB.setText(  this.conexion.getModo() );
        //Obtiene registros de la base de datos
        Map data = this.conexion.Obtener_Frase_Celebre();
        this.txtTexto.setText( data.get("texto").toString() ); 
        this.txtAutor.setText( data.get("autor").toString() ); 
    }

...

 OJO: no copies y pegues, estudia el código ¿ después porque tenemos errores de compilación? :/

Compilación y ejecución

Antes de ejecutar el programa, debes copiar las bases de datos *.accdb y *.sqlite en la misma carpeta donde esta el proyecto netbeans.

files p

Ademas, en la clase ConexionDB.java, debes modificar la variable «path» que tiene el valor de «C:\\Users\\obama\\Documents\\NetbeansProjects\\dbDouble\\» , por la dirección de TU proyecto netbeans. Esto solo para la ejecución desde el IDE, cuando crees el *.JAR con «Clean and Build» , debes descomentar la linea de código: «private String path = System.getProperty(«user.dir») + «\\» ;» de esta forma cuando se creen los archivos en la carpeta DIST, copias dentro de ellos las bases de datos y ya podrás ejecutar la aplicación.

sqlite y access

EL proyecto completo en el siguiente enlace pobre

🙂

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Detección de rostros con android

Detección de rostros con android

La API de Android ha ido evolucionado rápidamente y cada vez contiene más funcionalidades que hacen que desarrollar sist...

Crear XML desde una base de datos con jDom

Crear XML desde una base de datos con jDom

Un post cortito de fin de semana 🙂 , este trata de la forma de extraer la información de una base de datos formar una es...

Transición de imágenes al estilo PowerPoint

Transición de imágenes al estilo PowerPoint

¿Qué es una transición? Una transición es un efecto de movimiento que se da entre una imagen y la siguiente en una prese...

Evaluar expresiones matemáticas en Java con JavaScript

Evaluar expresiones matemáticas en Java con JavaScript

Java 8 trae consigo una nueva versión del motor de JavaScript llamada Nashorn, este motor introduce mejoras de rendimien...

Código de Control en PHP v7.0 Bolivia

Código de Control en PHP v7.0 Bolivia

NUEVA ESPECIFICACIÓN TÉCNICA DEL CÓDIGO DE CONTROL (Ver.7.0) En el marco del Nuevo Sistema de Facturación implementado p...

Primeros pasos con Vue CLI: Crea tu Entorno de Trabajo

Primeros pasos con Vue CLI: Crea tu Entorno de Trabajo

En un post anterior [Introducción a VueJS framework para el desarrollo FrontEnd] realizamos una breve introducción a Vue...

7 comentarios en “base de datos multiple – parte II”

  1. VIANEY VARGAS dice:

    Mouse no tienes un tutorial de como actualizar datos ?? a la base de datos que elija del JCombobox??? porfavor te lo agradezco bastante si lo publicas. tengo un JCombobox para las bases de datos y el otro Jcombobox que tengo esta lleno de dos campos de una tabla y tengo un JTexfield cuanod dijito una referencia me trae los datos a los otros JTexfield y al JCombobox los Jtexfield actualizan bien pero no se actualiza el campo q elijo del Jcomobox??? no tienes alguno asi porfavor

    1. Mouse dice:

      no capto bien la idea, si pudieras mostrarme una imagen 🙂 mucho mejor 🙂

  2. Héctor dice:

    Hola, Mouse, gracias por tu aporte, me ha sido de gran ayuda
    El link al proyecto completo ya se murio ¿podrías por favor subirlo de nuevo?
    gracias de nuevo y saludos jeje

    1. Mouse dice:

      Hola, si resubire el archivo pero tengo que buscarlo 🙂 ya no recordaba haberlo hecho 🙂

    2. Mouse dice:

      Hola, java ya dejo de dar soporte para la conexión a access mediante JDBC-ODBC por lo tanto este código, o por lo menos la parte que corresponde a Access ya no te es de utilidad. saludos

      1. Héctor dice:

        Gracias Mouse, me preguntaba si es posible tener dos conexiones a dos bases de datos SQLite/H2SQL/HSSQL diferentes es una pequeña duda que me había surgido pero no he tenido éxito probándolo, esto al no poder usar Access.
        Gracias de nuevo 😀

        1. Mouse dice:

          Si se puede

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...

Herramientas

Generador de Enlaces a Whatsapp