2010-12-08 12 views
21

Estoy tratando de configurar una base de datos Derby incrustada para una aplicación Java independiente, pero después de verter todo tipo de documentación, parece que no puedo encontrar explicaciones simples o ejemplos. Estoy usando Eclipse con el plugin Derby y he habilitado la naturaleza de Derby para mi proyecto.Configurando una base de datos Derby incrustada en una aplicación Java independiente

Encontré un ejemplo del uso de una base de datos Derby incrustada en un standalone address book, así como una descripción general del uso de Derby en Eclipse (que no parece abarcar la implementación integrada), pero todavía siento que me falta algo fundamental.

Esta es mi primera vez tratando de utilizar una base de datos con Java, y yo soy un poco confundido, así que aquí están mis preguntas básicas:

  • ¿Cuál es la filosofía básica (o modelo) para ver cómo interactúa Java con una base de datos Derby (en una implementación incrustada)? ¿Se deben seguir sus patrones de diseño importantes?
  • ¿Necesito crear algún tipo de constructor de base de datos (que incluya estructura de tabla, etc.) en una clase, o todo eso se hace con alguna otra herramienta?
  • Una vez creada y guardada la base de datos, ¿cómo la "inicio"? ¿Y dónde se guarda la base de datos real?

¡Los fragmentos de código serían muy útiles!

+0

Aquí hay un excelente lugar para comenzar: http://db.apache.org/derby/docs/10.6/getstart/ En particular, siga los pasos de este tutorial; Encontrará una buena cantidad de código de muestra para ayudarlo a ver los pasos a medida que los realiza: http://db.apache.org/derby/docs/10.6/getstart/cgstutorialintro.html –

+0

Este es el mejor. Concisa y completa: http://www.codejava.net/java-se/jdbc/connect-to-apache-derby-java-db-via-jdbc – Bipul

Respuesta

1

Si está bien con el cambio a netbeans IDE aquí hay dos útiles tutoriales con los que pude trabajar en el ide (tengo algunos problemas menores con el instalador). Utiliza JPA, que es una abstracción que simplifica una gran cantidad de interacción con la base de datos.

https://blogs.oracle.com/geertjan/entry/embedded_database_for_netbeans_platform

http://platform.netbeans.org/tutorials/nbm-crud.html

Para hacer frente a algunas de sus preguntas:

  1. Si está usando Java y relación DBS recomiendo encarecidamente APP. De lo contrario, está utilizando JDBC para interactuar con su base de datos y usando SQL.
  2. Tradicionalmente se utiliza una utilidad o ejecutar una secuencia de comandos para crear el esquema de la tabla sin embargo, desde que se va para incrustado que posible interés (como soy) en tener el PP y el esquema crearlo auto dinámicamente por lo que don' Debe ejecutar este script cada vez que instale su aplicación. Esto es factible con la configuración integrada de derby JPA que cubre el tutorial.
  3. si está ejecutando una base de datos derby incrustada no hay un subproceso o socket que se inicie . su aplicación usará la api jpa o derby que utilizará el bloqueo de archivos para acceder a los archivos derby. En mi definición, una base de datos incrustada de no tiene un hilo o proceso separado que escuche en un socket manejando solicitudes múltiples.

Espero que esto ayude y buena suerte!

0

Esos blogs n url son muy maravillosos, pero sugiero el cambio OP a NetBeans aunque utilicé la versión d ClientDriver de los controladores Derby de Java y creo una clase o método para iniciar la base de datos automáticamente en el momento de inicio tan que no encuentro ningún SQLException en tiempo de ejecución y ha estado funcionando. Aunque yo uso NetworkServerControl clase para poner en marcha mi base de datos en tiempo de ejecución va como diz

NetworkServerControl server=new NetworkServerControl(InetAddress.getLocalHost(),1527); 
server.start (null); 
//Class.forName n DriverManager.getConnection() declarations goes here. 
+0

Puede hacer un esfuerzo para utilizar el idioma correcto en inglés. ty –

+4

Er, ¿qué? ¿Te gusta cambiar al IDE de NetBeans? Dado que es casi completamente tangencial a su problema real, y no puede resolverlo independientemente ... –

2

sugiero que utilice una clase llamada ConnectionDerby, donde poner toda la lógica y los parámetros para seleccionar, insertar, actualizar, eliminar , y como una base de datos incrustada comprobo si una base de datos ya existe, si no existe, creo entonces, espero que este código te ayude, lo siento o mi inglés y soy novato usando esta base de datos en Java, pero espero que esto te ayude a entender ....

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import javax.swing.JOptionPane; 

public class ConnectionDerby { 

    private Connection conn = null; 
    private Statement sttm = null; 

    public Connection CrearBD(String query) { 
    try { 
     //Obtenemos el Driver de Derby 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db;create=true"); 
     if (conn != null) { 
      //JOptionPane.showMessageDialog(null, "Base de Datos Lista"); 
      try { 
       PreparedStatement pstm = conn.prepareStatement(query); 
       pstm.execute(); 
       pstm.close(); 
       //JOptionPane.showMessageDialog(null, "Base de Datos Creada Correctamente"); 
       System.out.println("SENTENCIA SQL EFECTUADA CORRECTAMENTE"); 
      } catch (SQLException ex) { 
       //JOptionPane.showMessageDialog(null, ex.getLocalizedMessage()); 
       System.out.println(ex.getMessage()); 
       JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE); 
       //JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL"); 
      } 
     } 

    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
     JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE); 
     //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN EJECUTAR LAS SENTENCIAS SQL parte 2"); 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
     JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE); 
     //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN EJECUTAR LAS SENTENCIAS SQL parte 3"); 
    } 
    return conn; 
} 

public Connection AccederBD() { 
    try { 
     //Obtenemos el Driver de Derby 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     //Obtenemos la Conexión 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db"); 
     if (conn != null) { 
      System.out.println("Base de Datos Ya Leida Correctamente"); 
      //JOptionPane.showMessageDialog(null, "Base de Datos Ya Leida Correctamente"); 
     } 
    } catch (SQLException e) { 
     System.out.println(e.getMessage()); 
     System.out.println("Sistema Creado por Mario José Echeverría"); 
     System.out.println("NO SE ENCONTRO LA BASE DE DATOS"); 
     System.out.println("CREANDO BASE DE DATOS EN DERBY DATABASE"); 
     String createTableProyecto = "Sentence to create first table"; 
     String createTablePrimer = "Sentence to create second table"; 
     String createTableTopCoat = "Sentence to create third table"; 
     String createTableCotizacion = "Sentence to create fourth table"; 
     CrearBD(createTableProyecto); 
     CrearBD(createTablePrimer); 
     CrearBD(createTableTopCoat); 
     CrearBD(createTableCotizacion); 
     //*************PRUEBAS***************** 
    } catch (ClassNotFoundException e) { 
     System.out.println(e.getMessage()); 
     System.out.println("ERROR DE TIPO ClassNotFoundException"); 
     //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN ACCEDER A LA BASE DE DATOS parte 2"); 
    } 
    return conn; 
} 

public void UID(String sqlcad) { 
    try { 
     //Obtenemos el Driver de Derby 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db"); 
     sttm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 
     sttm.executeUpdate(sqlcad); 
     System.out.println("Conexión Exitosa a la Base de Datos"); 
     //JOptionPane.showMessageDialog(null, "Conexión exitosa"); 
     sttm.close(); 
     conn.close(); 
     if (conn != null) { 
      System.out.println("Consulta Realizada Correctamente"); 
      //JOptionPane.showMessageDialog(null, "Base de Datos Ya Leida Correctamente"); 
     } 
    } catch (SQLException e) { 
     System.out.println("Error= " + e.getMessage()); 
    } catch (ClassNotFoundException e) { 
     System.out.println("Error= " + e.getMessage()); 
    } 
} 

public ResultSet getvalores(String sqlcad) { 
    ResultSet rs = null; 
    try { 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db"); 
     sttm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 
     //String sqlcad = "Select nombre, m2xgal, pregal, precub, descripcion from primer"; 
     rs = sttm.executeQuery(sqlcad); 
     return rs; 
    } catch (Exception e) { 
     System.out.println("Error= " + e.getMessage()); 
     return rs; 
    } 
} 
} 
+0

¿Podría explicar cuál es la diferencia entre '. \\ BD \\ nombrebasededatos.db' y' C \ ... somePath .. . \ BD \\ nombrebasededatos.db'? – mustangDC

0

nunca lo hice derby (aunque hizo una vez mysql) y nos dieron todo al pasar de this simple example. En realidad, ni siquiera leí la charla, simplemente me desplacé al medio, donde se explica por sí mismo.

1

Para utilizar Derby en Java en el modo integrado, que tenemos que hacer los siguientes pasos:

  • utilizar el controlador org.apache.derby.jdbc.EmbeddedDriver, ubicados en la dependencia derbyclient Maven
  • Usar la cadena de conexión para el modo integrado: jdbc:derby:dbname
  • Establecer el hogar sistema de Derby: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • Apague Derby programáticamente al final: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • error XJ015 manija, que se activa al apagar el exitoso

ejemplos de trabajo completo se puede encontrar en mi Java JDBC Derby programming tutorial.

Cuestiones relacionadas