Настройка встроенной базы данных Derby в автономном приложении Java - PullRequest
24 голосов
/ 09 декабря 2010

Я пытаюсь настроить встроенную базу данных Derby для отдельного Java-приложения, но после просмотра всех видов документации я просто не могу найти никаких простых объяснений или примеров. Я использую Eclipse с плагином Derby и включил природу Derby для моего проекта.

Я нашел пример использования встроенной базы данных Derby в автономной адресной книге , а также обзор использования Derby в Eclipse (который, кажется, не охватывает встроенное развертывание), но я все еще чувствую, что я упускаю что-то фундаментальное.

Я впервые пытаюсь использовать базу данных с Java, и я немного растерялся, поэтому вот мои основные вопросы:

  • Какова основная философия (или модель) взаимодействия Java с базой данных Derby (во встроенном развертывании)? Нужно ли следовать их важным шаблонам дизайна?
  • Нужно ли создавать какой-то тип конструктора базы данных (который включает в себя структуру таблицы и т. Д.) В классе, или это все делается с помощью какого-то другого инструмента?
  • Одна база данных создана и сохранена, как мне ее «запустить»? И где хранится актуальная база данных?

Фрагменты кода были бы очень полезны!

Ответы [ 5 ]

2 голосов
/ 22 марта 2017

Чтобы использовать Derby в Java во встроенном режиме, нам нужно выполнить следующие шаги:

  • Используйте драйвер org.apache.derby.jdbc.EmbeddedDriver, расположенный в derbyclient Maven зависимость
  • Использовать строку подключения для встроенного режима: jdbc:derby:dbname
  • Установить домашнюю систему Derby: System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • В конце закройте Дерби программно: DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • Обрабатывать ошибку XJ015, которая срабатывает при успешном завершении работы

Полные рабочие примеры можно найти в моем руководстве по программированию Java JDBC Derby .

2 голосов
/ 04 марта 2014

Я предлагаю вам использовать класс с именем ConnectionDerby, в который помещается вся логика и параметры для выбора, вставки, обновления, удаления, а также в качестве встроенной базы данных, которую я компробирую, если база данных уже существует, если не существует, то я ее создал,Я надеюсь, что этот код поможет вам, извините или мой английский, и я новичок, использующий эту базу данных в Java, но я надеюсь, что это поможет вам понять ....

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;
    }
}
}
1 голос
/ 01 сентября 2012

Если вы согласны с переходом на IDE NetBeans, вот два полезных урока, которые я смог получить в работе с ide (у меня есть некоторые незначительные проблемы с установщиком). Он использует JPA, которая является абстракцией, которая значительно упрощает взаимодействие с базой данных.

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

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

Чтобы ответить на некоторые ваши вопросы:

  1. Если вы используете Java и DDS, я очень рекомендую JPA. В противном случае вы используете JDBC для взаимодействия с вашей базой данных и используя SQL.
  2. Традиционно вы используете утилиту или запускаете скрипт для создать схему таблицы, так как вы собираетесь встроить вас может быть заинтересован (как и я) в создании БД и схемы динамически, так что вам не нужно запускать этот скрипт каждый раз, когда вы установите ваше приложение. Это выполнимо со встроенным JPA дерби конфигурация, которую охватывает учебник.
  3. если вы используете встроенной базы данных Derby нет отдельного потока или сокета, который Вы запускаете. ваше приложение будет использовать JPA или Derby API, который будет использовать блокировка файлов для доступа к файлам дерби. В моем определении встроенный база данных не имеет отдельного потока или процесса, прослушивающего сокет обработка нескольких запросов.

Надеюсь, это поможет и удачи!

0 голосов
/ 13 мая 2015

Я никогда не занимался дерби (хотя когда-то занимался mysql) и получил все от этого простого примера . На самом деле я даже не читал лекцию - я просто прокрутил до середины, где есть очевидный пример.

0 голосов
/ 23 ноября 2013

Эти блоги очень хороши, но я предложу переключить OP на NetBeans, хотя я использовал версию драйверов Derby Java * d ClientDriver и создал класс или метод для автоматического запуска базы данных во время запуска так что я не сталкиваюсь с SQLException во время выполнения, и оно работает. Хотя я использую класс NetworkServerControl для запуска базы данных во время выполнения, как diz

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