Apache Derby и Java

derby-logo-web

Apache Derby – open source инструмент для работы с реляционными базами данных в Java. Распространяется по лицензии Apache v 2.0.


Когда перед Вами стоит задача написать небольшое приложение, работающее с реляционной базой данных (относительно небольшой) Apache Derbyможет и не идеальный, но удобный инструмент для выполнения поставленной задачи. Об основных преимуществах Derby можно прочитать на офсайте. Но если в двух словах, то:

  • Apache Derby основан на стандартах Java, JDBC и SQL;
  • для платформы Eclipse распространяется в виде плагина;
  • для полноценной работы программы на стороне клиента не требует дополнительной установки сервера (грубо говоря, сервер будет “зашит” в программу);
  • прост в использовании;
  • ….

    Скачивание

    Для написания простой программы (чтение/запись из/в БД) необходимо скачать плагин для Eclipse. На момент написания статьи последним официальным релизом Derby является версия 1.6.2.1. (Скачать).  На данной странице присутствуют различные раздачи Derby. Нас же интересует плагин для Eclipse. Ищем на странице слова “There are two separate Eclipse plugins for Derby:” все, что находится ниже (2 файла: derby_core_plugin и derby_ui_doc_plugin )-качаем. Прямые ссылки на скачивания:
На странице загрузок можно посмотреть список всех доступных версий, а также последний официальный релиз Derby.

Установка Derby-плагина для Eclipse

Скачанные ранее файлы (derby_core_plugin и derby_ui_doc_plugin ) необходимо распаковать в …/Eclipse/plugins

Запускаем локальный сервер Derby

Создаем новый Java-проект в Eclipse. Далее правой кнопкой мыши (ПКМ) по созданному проекту. Если правильно установили (распаковали) плагин Derby, то по нажатию ПКМ по проекту в контекстном меню должна появится строчка вида:

pic_1
Для того, чтобы добавить поддержку в наш проект, выбираем Add Apache derby nature.  Теперь, если опять нажать ПКМ по нашему проекту, то в контекстное меню для Derby будет выглядеть следующим образом:

2
  1. контекстное меню Derby;
  2. запуск локального сервера Derby;
  3. остановка сервера Derby;
  4. командная строка Derby;
Выбираем пункт 2 - запускаем локальный сервер Derby. Если все прошло удачно-появится диалоговое окно следующего содержания:

4
Если данное окно не появилось по каким-либо причинам – читаем ошибки в Console.

Создаем базу данных

Теперь займемся созданием базы данных. Создавать БД будем при помощи командной строки Derby - ij (Interactive SQL) – п. 4. ПКМ по нашему проекту—>Apache Derby –>ij. В результате в консоли появится сообщение:
ij version 10.6
ij>
Далее вводим команду:

connect 'jdbc: derby://localhost:1527/userDB;create=true';

Данная команда создает БД с именем userDB. Параметр create=true как раз-таки и отвечает за создание новой базы. В результате данных манипуляций в Package Explorer в Eclipse появятся папка с именем нашей БД и папка с именем “Derby Library”:

5

Создадим в нашей БД таблицу users с полями first_name, last_name. us_id:

create table users (first_name varchar(30) not null, last_name varchar (30) not null, us_id integer not null);   

Заполним нашу таблицу следующими записями (записи в консоли вводятся поочередно, каждая команда заканчивается точкой с запятой ):

insert into users values ('Tom', 'Anderson',1);
insert into users values (‘Andew’, 'Yawk',2);
insert into users values (‘Alex’, ‘Popov’, 3); 

Для того, чтобы просмотреть нашу таблицу вводим команду:

     select * from users

В результате в консоли будет выведен результат:
FIRST_NAME                    |LAST_NAME                     |US_ID     
-------------------------------------------------------------------------
Tom                           |Anderson                      |1         
Andrew                        |Yawk                          |2         
Alex                          |Popov                           |3        
База данных –создана.

Пишем программу

В данном примере будем рассматривать простую программу. Создаем класс, например Main (при создании класса ставим галочку напротив “public static void main…”).

Для работы с нашей БД необходимо зарегистрировать в нашей программе драйвер JDBC, установить соединение к нашей БД, указать путь (URL) к БД  . Для этого пишем следующий код:

String driver ="org.apache.derby.jdbc.EmbeddedDriver"; //регистрируем JDBC        
String dbName = "userDB"; // указываем имя нашей БД         
String connectionURL = "jdbc: derby:" + dbName; //URL к БД         
java.sql.Connection conn = null;         
    
    try {         
        Class.forName(driver);         
    } catch (java.lang.ClassNotFoundException e) {         
        e.printStackTrace();         
    }         
    try {         
        conn = DriverManager.getConnection(connectionURL);

/* остальная часть кода будет тут*/ 

} catch (Throwable er) {        
        er.printStackTrace();         
    } finally {         
        conn.close();         
    }

}

Пробуем запустить нашу программу. Если ошибок не возникает – едем дальше – пишем оставшуюся часть кода, которая будет считывать/записывать из/в нашу БД. Для этого пишем следующий код (его необходимо вставить до или после слов    “ /* остальная часть кода будет туту*/ “).

Для записи в нашу БД:

     Statement st=conn.createStatement();        
     int m=st.executeUpdate("INSERT INTO USERS VALUES('Adam','Smith',4)");         
      System.out.println("Updated " + m + " rows"); 

Данный код добавит в таблицу users пользователя “Adam Smyth” с id=4; Последняя строчка данного кода выведет нам в консоли количество добавленных строк:
"Updated 1 rows"

Считаем записи из нашей БД и выведем результат в консоль:

     ResultSet rs = st.executeQuery("Select * from users");        
            while (rs.next()) {         
                String first = rs.getString(1);         
                String last = rs.getString(2);         
                int id = rs.getInt(3);         
                
                System.out.println(id+ " " + first+" "+ last+ " ");         
            
            }         
            rs.close();

В результате в консоли будет выведено сообщение:
1 Tom Anderson
2 Andrew Yawk
3 Alex Popov
4 Adam Smith
Полный код программы приведен ниже:

     package com.lex;

import java.sql.DriverManager;        
import java.sql.ResultSet;         
import java.sql.SQLException;         
import java.sql.Statement;

import org.apache.derby.client.am.Connection;        
//import org.apache.derby.client.am.Statement;

public class Main {

    public static void main(String[] args) throws SQLException {         
        // TODO Auto-generated method stub         
        
        String driver ="org.apache.derby.jdbc.EmbeddedDriver";         
        String dbName = "userDB";         
        String connectionURL = "jdbc: derby:" + dbName;         
        java.sql.Connection conn = null;         
        
        try {         
            Class.forName(driver);         
        } catch (java.lang.ClassNotFoundException e) {         
            e.printStackTrace();         
        }         
        try {         
            conn = DriverManager.getConnection(connectionURL);         
            // body of code to go here         
        
            Statement st=conn.createStatement();         
            int m=st.executeUpdate("INSERT INTO USERS VALUES('Adammy','Smithy',5)");         
            System.out.println("Updated " + m + " rows"); 

            ResultSet rs = st.executeQuery("Select * from users");        
            while (rs.next()) {         
                String first = rs.getString(1);         
                String last = rs.getString(2);         
                int id = rs.getInt(3);         
                
                System.out.println(id+ " " + first+" "+ last+ " ");         
            
            }         
            rs.close();         
            
        } catch (Throwable er) {         
            er.printStackTrace();         
        } finally {         
            conn.close();         
        }

    }

}

Как видно, ничего сложного. Для более серьезных проектов – соответствующее решение поставленной задачи.

Комментарии

  1. Thanx, пригодится в скором времени. Пока пишу сайтец на Google App Engine: там такое загадочное "нереляционное" хранилище: никаких таблиц, просто списываешь объекты разных типов в хранилище и считываешь обратно. Правда, для каждого запроса нужно предварительно создавать индекс, не больше 1000 результатов за один запрос и вообще адский ужас.

    ОтветитьУдалить
  2. Анонимный26 мая 2012 г., 10:45

    Вы хотите сказать, что у вас не было ошибки при вводе этой команды?
    connect 'jdbc: derby:/userDB;create=true';

    ОтветитьУдалить
  3. Да, действительно команда записана не верно. Исправил.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Написание сервлетов в Java при помощи NetBeans

Права доступа в Debian и команды chmod и chown

Установка Apache Tomcat в ОС Windows