Настройка встроенной базы данных Derby в автономном приложении Java

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

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

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

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

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


person Clark Minor    schedule 08.12.2010    source источник
comment
Вот отличное место для начала: db.apache.org/derby/docs/10.6/ getstart В частности, следуйте инструкциям в этом руководстве; вы найдете достаточное количество примеров кода, которые помогут вам увидеть шаги по мере их выполнения: db.apache.org/derby/docs/10.6/getstart/cgstutorialintro.html   -  person Bryan Pendleton    schedule 09.12.2010
comment
Этот лучший. Кратко и полно: codejava. сеть/java-se/jdbc/   -  person Bipul    schedule 19.01.2014


Ответы (5)


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

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

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

person Jan Bodnar    schedule 22.03.2017

Я предлагаю вам использовать класс с именем 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;
    }
}
}
person Mario    schedule 04.03.2014
comment
Не могли бы вы объяснить, в чем разница между .\\BD\\nombrebasededatos.db и C\...somePath...\BD\\nombrebasededatos.db? - person mustangDC; 10.06.2015


Если вы согласны с переходом на 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 и отношения dbs, я настоятельно рекомендую JPA. В противном случае вы используете JDBC для взаимодействия с вашей базой данных и используете SQL.
  2. Традиционно вы используете утилиту или запускаете скрипт для создания схемы таблицы, однако, поскольку вы собираетесь использовать встроенные, вы можете быть заинтересованы (как и я) в том, чтобы база данных и схема создавали ее динамически, поэтому вам не нужно запускать этот скрипт каждый раз, когда вы устанавливаете приложение. Это выполнимо с помощью встроенной конфигурации JPA derby, которую описывает учебник.
  3. если вы используете встроенную базу данных derby, вы не запускаете отдельный поток или сокет. ваше приложение будет использовать API jpa или derby, который будет использовать блокировку файлов для доступа к файлам derby. В моем определении встроенная база данных не имеет отдельного потока или процесса, прослушивающего сокет, обрабатывающий несколько запросов.

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

person simgineer    schedule 31.08.2012

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

NetworkServerControl server=new NetworkServerControl(InetAddress.getLocalHost(),1527);
server.start (null);
//Class.forName n DriverManager.getConnection() declarations goes here. 
person danes    schedule 23.11.2013
comment
Э, что? Нравится переход на среду IDE NetBeans? Учитывая, что это почти полностью касается его настоящей проблемы и, возможно, не решит ее, несмотря ни на что... - person Clockwork-Muse; 23.11.2013