web-dev-qa-db-fra.com

Configuration d'une base de données Derby intégrée dans une application autonome Java application

J'essaie de configurer une base de données Derby intégrée pour une application autonome Java application, mais après avoir parcouru toutes sortes de documentation, je n'arrive pas à trouver d'explications ou d'exemples simples. m utilisant Eclipse avec le plugin Derby et activé la nature Derby pour mon projet.

J'ai trouvé un exemple d'utilisation d'une base de données Derby intégrée dans un carnet d'adresses autonome ainsi qu'un aperçu de l'utilisation de Derby dans Eclipse (qui ne semble pas couvrir le déploiement intégré), mais j'ai toujours l'impression que Il me manque quelque chose de fondamental.

C'est la première fois que j'essaie d'utiliser une base de données avec Java, et je suis un peu confus, alors voici mes questions de base:

  • Quelle est la philosophie (ou le modèle) de base pour la façon dont Java interagit avec une base de données Derby (dans un déploiement intégré)? Leurs modèles de conception importants doivent-ils être suivis?
  • Dois-je créer un type de constructeur de base de données (qui inclut la structure de table, etc.) dans une classe, ou est-ce que tout est fait avec un autre outil?
  • Une fois la base de données créée et enregistrée, comment la "démarrer"? Et où la base de données réelle est-elle enregistrée?

Des extraits de code seraient très utiles!

24
Clark Minor

Pour utiliser Derby en Java en mode embarqué, nous devons effectuer les étapes suivantes:

  • Utilisez le pilote org.Apache.derby.jdbc.EmbeddedDriver, Situé dans la dépendance derbyclient Maven
  • Utilisez la chaîne de connexion pour le mode intégré: jdbc:derby:dbname
  • Configurer la maison du système Derby: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • Arrêtez Derby par programme à la fin: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • Gérer l'erreur XJ015, qui est déclenchée lors d'un arrêt réussi

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

2
Jan Bodnar

Je vous suggère d'utiliser une classe nommée ConnectionDerby, où mettre toute la logique et les paramètres pour sélectionner, insérer, mettre à jour, supprimer et en tant que base de données intégrée, je comprends si une base de données existe déjà, si elle n'existe pas, j'ai créé alors, j'espère que cela le code vous aide, désolé ou mon anglais et je suis novice en utilisant cette base de données 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(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;
    }
}
}
2
Mario

Si vous êtes d'accord avec le passage aux netbeans IDE voici deux tutoriels utiles que j'ai pu faire fonctionner dans l'ide (j'ai quelques problèmes mineurs avec le programme d'installation). Il utilise JPA qui est une abstraction qui simplifie beaucoup d'interaction avec la base de données.

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 relation dbs, je recommande fortement JPA. Sinon, vous utilisez JDBC pour interagir avec votre base de données et utiliser SQL.
  2. Traditionnellement, vous utilisez un utilitaire ou exécutez un script pour créer le schéma de la table, mais puisque vous optez pour l'embarqué, vous pourriez être intéressé (comme je le suis) à ce que la base de données et le schéma se créent automatiquement de sorte que vous n'ayez pas à exécuter ce script chaque fois que vous installez votre application. Cela est possible avec la configuration JPA intégrée de derby que le didacticiel couvre.
  3. si vous exécutez une base de données derby intégrée, il n'y a pas de thread ou de socket séparé que vous démarrez. votre application utilisera l'api jpa ou derby qui utilisera le verrouillage de fichier pour accéder aux fichiers derby. Dans ma définition, une base de données intégrée n'a pas de thread séparé ni d'écoute de processus sur un socket gérant plusieurs requêtes.

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

1
simgineer

Je n'ai jamais fait de derby (bien que je l'ai fait une fois sur mysql) et j'ai tout fait cet exemple simple . En fait, je n'ai même pas lu le discours - je viens de faire défiler vers le milieu où se trouve un exemple explicite.

0
Vit Bernatik

Ces blogs n url sont très merveilleux mais je proposerai le basculement OP vers NetBeans même si j'ai utilisé la version d ClientDriver de Java pilotes Derby et je crée une classe ou une méthode pour démarrer la base de données automatiquement au moment du démarrage afin que je ne rencontre aucun SQLException au moment de l'exécution et que cela fonctionne. Bien que j'utilise la classe NetworkServerControl pour démarrer ma base de données lors de l'exécution le temps passe comme diz

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