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

j'essaie de configurer une base de données Derby intégrée pour une application Java autonome, mais après avoir passé en revue toutes sortes de documentation, Je n'arrive pas à trouver d'explications ou d'exemples simples. J'utilise Eclipse avec le plugin Derby et j'ai activé Derby nature pour mon projet.

j'ai trouvé un exemple d'utilisation d'une base de données Derby intégrée dans un autonome carnet d'adresses 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 quand même l'impression de rater quelque chose de fondamental.

C'est ma première tentative d'utilisation d'une base de données avec Java, et je suis un peu confus, alors voici mes questions:

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

des bribes de code seraient très utiles!

23
demandé sur Clark Minor 2010-12-09 02:27:32

5 réponses

utiliser Derby en Java en mode imbriqué, nous avons besoin de faire les étapes suivantes:

  • org.apache.derby.jdbc.EmbeddedDriver pilote, situé dans derbyclient Maven dependency
  • utilisez la chaîne de connexion pour le mode embarqué:jdbc:derby:dbname
  • mettre en place le système Derby accueil: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • arrêter le Derby de façon programmatique à la fin: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • Poignée XJ015 erreur, qui est déclenché au succès de l'arrêt

exemples complets peut être trouvé à mon Java JDBC Derby programming tutorial.

2
répondu Jan Bodnar 2017-03-22 14:00:29

je suggère que vous utilisiez une classe appelée Connectierderby, où mettre toute la logique et les paramètres pour sélectionner, Insérer, mettre à jour, supprimer, et comme base de données intégrée Je comprobate si une base de données existe déjà, si elle n'existe pas j'ai créé alors, j'espère que ce code vous aidera, 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
répondu Mario 2018-02-24 21:13:40

si vous êtes d'accord pour passer à l'IDE netbeans voici deux tutoriels utiles que j'ai pu faire fonctionner dans l'ide (j'ai quelques problèmes mineurs avec l'installateur). Il utilise JPA qui est une abstraction qui simplifie beaucoup d'interaction de 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 à certains des vos questions:

  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 à l'aide de SQL.
  2. traditionnellement vous utilisez un utilitaire ou exécutez un script pour créer le schéma de la table Cependant puisque vous allez pour vous intégré pourrait être intéressé (comme je suis) à avoir le db et le schéma le créer auto dynamiquement de sorte que vous ne devez pas exécuter ce script à chaque fois que vous installez votre application. C'est faisable avec un derby de l'embedded JPA configuration couverte par le tutoriel.
  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é vous démarrez. votre application utilisera l'api jpa ou derby qui utilisera fermeture des fichiers pour accéder aux fichiers du derby. Dans ma définition d'un intégré la base de données n'a pas de thread séparé ou de processus d'écoute sur une socket traitement des demandes multiples.

espérons que cela aide et bonne chance!

1
répondu simgineer 2017-07-13 09:03:06

ces blogs n url sont très merveilleux mais je vais suggérer le passage OP à NetBeans même si j'ai utilisé d ClientDriver version des pilotes Java Derby et je crée une classe ou une méthode pour démarrer la base de données automatiquement au démarrage afin que je ne rencontre aucun SQLException à l'Heure de la course et cela a fonctionné. Si je dois utiliser NetworkServerControl cours pour démarrer ma base de données à l'exécution du temps va comme diz

NetworkServerControl server=new NetworkServerControl(InetAddress.getLocalHost(),1527);
server.start (null);
//Class.forName n DriverManager.getConnection() declarations goes here. 
0
répondu danes 2013-11-23 14:29:11

je n'ai jamais fait de derby (bien que l'a fait une fois mysql) et réussi tous les cours de cet exemple simple. En fait, je n'ai même pas lu l'exposé - je viens de faire défiler au milieu où l'exemple explicite est.

0
répondu Vit Bernatik 2015-05-13 17:21:34