Configuration d’une firebase database Derby intégrée dans une application Java autonome

J’essaie de configurer une firebase database Derby intégrée pour une application Java autonome, mais après avoir parcouru toutes sortes de documents, je n’arrive pas à trouver d’explications ou d’exemples simples. J’utilise Eclipse avec le plugin Derby et j’ai activé la nature de Derby pour mon projet.

J’ai trouvé un exemple d’utilisation d’une firebase database Derby intégrée dans un carnet d’adresses autonome et une présentation de l’utilisation de Derby dans Eclipse (cela ne semble pas couvrir le déploiement intégré), mais j’ai toujours l’impression de manquer quelque chose de fondamental.

C’est la première fois que j’essaie d’utiliser une firebase database avec Java, et je suis un peu confus. Voici donc mes questions de base:

  • Quelle est la philosophie de base (ou le modèle) de la manière dont Java interagit avec une firebase database Derby (dans un déploiement intégré)? Leurs modèles de conception importants sont-ils à suivre?
  • Dois-je créer un type de constructeur de firebase database (qui inclut la structure de la table, etc.) dans une classe ou est-ce que tout cela est fait avec un autre outil?
  • Une fois la firebase database créée et enregistrée, comment puis-je la “démarrer”? Et où la firebase database réelle est-elle enregistrée?

Des extraits de code seraient très utiles!

Pour utiliser Derby en Java en mode intégré, procédez comme suit:

  • Utilisez le pilote org.apache.derby.jdbc.EmbeddedDriver , situé dans la dépendance Maven de derbyclient
  • Utilisez la chaîne de connexion pour le mode incorporé: jdbc:derby:dbname
  • Configurez le système home de Derby: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • Arrêtez Derby par programme à la fin: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • Erreur de gestion XJ015 déclenchée à l’arrêt successif

Des exemples de travail complets peuvent être trouvés dans mon tutoriel de programmation Java JDBC Derby .

Je suggère que vous utilisez une classe nommée ConnectionDerby, où mettre toute la logique et les parameters pour sélectionner, insérer, mettre à jour, supprimer, et en tant que firebase database intégrée si une firebase database existe déjà, sinon existe, alors j’espère code vous aider, désolé ou mon anglais et je suis débutant en utilisant cette firebase database en java, mais j’espère que cela vous aidera à comprendre ….

 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(Ssortingng 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"); Ssortingng createTableProyecto = "Sentence to create first table"; Ssortingng createTablePrimer = "Sentence to create second table"; Ssortingng createTableTopCoat = "Sentence to create third table"; Ssortingng 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(Ssortingng 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(Ssortingng 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); //Ssortingng 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; } } } 

Si vous êtes d’accord avec le passage à l’IDE Netbeans, voici deux tutoriels utiles que j’ai pu travailler dans l’idé (j’ai quelques problèmes mineurs avec le programme d’installation). Il utilise JPA, une abstraction qui simplifie beaucoup l’interaction de la firebase database.

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

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

Pour répondre à certaines de vos demandes:

  1. Si vous utilisez Java et dbs relation, je vous recommande vivement JPA. Sinon, vous utilisez JDBC pour interagir avec votre firebase database et utilisez SQL.
  2. Traditionnellement, vous utilisez un utilitaire ou exécutez un script pour créer le schéma de la table. Cependant, puisque vous êtes en train de vous embarquer, vous pouvez être intéressé (comme moi) par la création dynamic de la firebase database et du schéma. chaque fois que vous installez votre application. Ceci est faisable avec la configuration JPA intégrée de derby que couvre le didacticiel.
  3. Si vous utilisez une firebase database Derby intégrée, vous ne démarrez pas de thread ou de socket distinct. votre application utilisera l’API jpa ou derby qui utilisera le locking de fichier pour accéder aux fichiers derby. Dans ma définition, une firebase database incorporée n’a pas de thread ou de processus séparé qui écoute sur un socket gérant plusieurs requêtes.

J’espère que ça t’aide et bonne chance!

Ces blogs sont vraiment merveilleux, mais je suggèrerai que l’OP soit transféré à NetBeans même si j’ai utilisé la version ClientDriver des pilotes Java Derby et que je crée une classe ou une méthode pour démarrer la firebase database automatiquement au démarrage afin t rencontrer aucune SQLException au moment de l’exécution et cela a fonctionné. Bien que j’utilise la classe NetworkServerControl pour démarrer ma firebase database au moment de l’exécution

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

Je n’ai jamais fait de derby (bien qu’une fois mysql) et j’ai tout suivi à partir de cet exemple simple . En fait, je n’ai même pas lu la conférence – je viens de faire défiler vers le milieu, où se trouve l’exemple explicite.