Обмен информацией с базой данных является одной из основных проблем для любого отдельного настольного или веб-приложения. В этой статье мы узнаем больше об управлении Apache Derby с помощью Java. Если вы мало знакомы с Apache Derby, вы можете прочитать Начало работы с Apache Derby. Там вы познакомитесь со всеми предварительными условиями и базовыми знаниями об управлении Apache Derby. Теперь, поскольку мы обычно используем базы данных для поддержки нашего приложения, нам нужно знать, как мы можем взаимодействовать с этим, используя внутреннюю технологию, а хорошо известной внутренней технологией является JAVA. Итак, давайте начнем изучать утилиты Java для того же.

Задействованные операции:

  1. Загрузка класса клиентского драйвера JDBC Apache Derby для объединения утилит.
  2. Получение подключения из диспетчера драйверов, используя строку подключения, указав ожидаемую базу данных.
  3. Инициализация оператора из желаемого соединения и выполнение оператора (ов) SQL.
  4. Итерация по ResultSet, если он создан.
  5. Закрытие основных элементов, таких как набор результатов, оператор (ы) и, самое главное, соединение.

И, применяя эти шаги, мы будем управлять базой данных через наши Java-программы.

Выполнение операций CRUD с использованием JAVA:

В этом разделе мы будем реализовывать шаги, описанные выше. А если вы планируете использовать все возможности Apache Derby на одном компьютере, используйте встроенный драйвер. Или, если клиент JDBC подключается к серверу Apache Derby на удаленной машине, используйте драйвер сетевого клиента. Не забудьте включить файл jar клиента derby в путь к классам каждый раз, когда вы выполняете любой из приведенных ниже кодов. Этот файл jar предназначен для драйвера сетевого клиента.

Вставьте запись:

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

Синтаксис:

insert into [table name] (column names) values (desired values);

Полная реализация Java:

import java.sql.*;
class insert { 
public static void main(String args[]) { 
try { 
//Loading the Driver class
Class.forName("org.apache.derby.jdbc.ClientDriver");
//Establishing a connection with desired database
Connection connection = DriverManager.getConnection
("jdbc:derby://localhost:1527/database/places"); 
//Initializing statement and executing the an Insert SQL
Statement statement = connection.createStatement(); 
statement.executeUpdate
("insert into city (name, state_code) values('Lonavla' , 1)"); 
//Terminating statement and connection
statement.close(); 
connection.close(); 
System.out.println("Record inserted"); 
}
catch(SQLException sqlException) 
{ System.out.println(sqlException); } 
// Raised either if the connection is refused, or some other technical issue
catch(ClassNotFoundException cnfe) 
{ System.out.println(cnfe); } 
// Raised in case the Driver class is  not found
}
}

Теперь, чтобы скомпилировать вышеприведенное, как обычно, но при выполнении обязательно включите клиентский jar-файл derby в путь к классам, как показано ниже:

java -classpath [complete path to derby client jar file] insert

Не забудьте запустить сетевой сервер перед выполнением. Теперь, когда вы закончите, вы увидите сообщение "Запись вставлена", обязательно проверьте ее с помощью командной строки клиента Apache Derby.

Так как при вставке нам часто нужно получить id, соответствующий только что добавленной записи. Следовательно, вы можете изменить оператор с помощью подготовленного оператора. Просто инициализируйте PreparedStatement, а не Statement, и выполните итерацию по набору результатов, чтобы получить сгенерированный ключ, как описано ниже:

//Initializing the prepared statement with SQL and specifying argument for returning key
PreparedStatement preparedStatement = connection.prepareStatement
("insert into city (name,state_code) values(?, ?)" , Statement.RETURN_GENERATED_KEYS); 
//Setting up the prepared Statement
preparedStatement.setString(1, name); 
preparedStatement.setInt(2, stateCode); 
//Executing the prepared statement
preparedStatement.executeUpdate(); 
//Maintaining Result set for receiving the generated key
ResultSet resultSet = preparedStatement.getGeneratedKeys(); 
if(resultSet.next()) { 
int code = resultSet.getInt(1); //retrieving generated code
System.out.println("Assigned Code : "+code); 
} 
//Terminating Result set and prepared Statement
resultSet.close(); 
preparedStatement.close();

Скомпилируйте и выполните это, как это делалось ранее, и теперь вы получите идентификатор, соответствующий вновь добавленному городу. Теперь аналогичным образом мы поймем операции обновления, удаления и выборки с использованием Java.

Обновить запись:

Для обновления мы запустим запрос с предложением where, который сначала будет искать запись, удовлетворяющую ограничению, и обновлять эту запись новой информацией. Ниже приведен синтаксис и код для обновления записи:

Синтаксис:

update [table name] set [column name]=[new value] where [condition];
//multiple column names can be specified consecutively, separated by ","

Полная реализация Java:

import java.sql.*;
class update { 
public static void main(String args[]) { 
try { 
//Loading the Driver class
Class.forName("org.apache.derby.jdbc.ClientDriver"); 
Connection connection = DriverManager.getConnection
("jdbc:derby://localhost:1527/database/places");
//Initializing the prepared statement with an Update SQL
PreparedStatement preparedStatement = connection.prepareStatement
("update city set name = ? where name = ?"); 
//Setting up the prepared Statement
//preparing the statement
String oldName = "Lonavla";
String newName = "Nagpur";
preparedStatement.setString(1,newName); 
preparedStatement.setString(2,oldName); 
//Executing the prepared statement
preparedStatement.executeUpdate(); 
//Terminating prepared Statement and connection
preparedStatement.close();
connection.close(); 
System.out.println("Record updated"); 
}catch(SQLException sqlException) 
{ System.out.println(sqlException); } 
// Raised either if the connection is refused or some other technical issue
catch(ClassNotFoundException cnfe) 
{ System.out.println(cnfe); } 
// Raised in case the Driver class is  not found
}
}

Скомпилируйте и выполните приведенный выше код, как это было сделано ранее. Просто не забудьте включить клиентскую банку дерби в путь к классам во время выполнения. При компиляции кода путь к классам не требуется. После выполнения подключитесь через приглашение ij и проверьте, правильно ли изменена запись.

Точно так же за предложением where могут следовать многочисленные ограничения для более сложных структур запроса. Но все запросы всегда можно разбить на небольшие отдельные запросы для лучшего понимания. Теперь мы будем ждать удаления записи с помощью Java.

Удалить запись:

Для удаления записи мы снова запустим запрос с предложением where, который сначала будет искать запись, удовлетворяющую ограничению, и удалять эту запись из таблицы. Ниже приведен синтаксис и код для удаления записи:

Синтаксис:

delete from [table name] where [condition];

Полная реализация Java:

import java.sql.*;
class delete{ 
public static void main(String args[]) { 
try { 
//Loading the Driver class
Class.forName("org.apache.derby.jdbc.ClientDriver"); 
Connection connection = DriverManager.getConnection
("jdbc:derby://localhost:1527/database/places");
//Initializing the prepared statement with SQL
PreparedStatement preparedStatement = connection.prepareStatement
("delete from city where name = ?"); 
//Setting up the prepared Statement
preparedStatement.setString(1,"Nagpur"); 
//Executing the prepared statement
preparedStatement.executeUpdate(); 
//Terminating prepared statement and connection
preparedStatement.close();
connection.close(); 
System.out.println("Record deleted");
 
}catch(SQLException sqlException) 
{ System.out.println(sqlException); } 
// Raised either if the connection is refused or some other technical issue
catch(ClassNotFoundException cnfe) 
{ System.out.println(cnfe); } 
// Raised in case the Driver class is  not found
}
}

Скомпилируйте и выполните приведенный выше код, как это было сделано ранее. Опять же, не забудьте включить клиентскую банку дерби в путь к классам во время выполнения. Если jar клиента derby не включается во время выполнения, возникает исключение Class not found. После выполнения подключитесь через приглашение ij и перекрестно проверьте, правильно ли удалена нужная запись.

Теперь нам осталась последняя и единственная операция CRUD, то есть извлечение данных из таблицы, которую мы будем изучать в следующем разделе.

Получение записей:

У этой операции может быть несколько вариантов с использованием таких предложений, как where, order by, group by и многих других, использующих подзапросы. Ниже приведен синтаксис и код для извлечения записей из таблицы:

Синтаксис:

select [column name] from [table name] where [condition];
//where clause is optional. If not given, all the records will be retrieved and if given, only records following the constrain will be retrieved
//if all columns are required, use "*" in place of column name

Полная реализация Java:

import java.sql.*;
class select {
public static void main(String args[]) {
try{
//Loading the driver class
Class.forName("org.apache.derby.jdbc.ClientDriver"); 
Connection connection = DriverManager.getConnection
("jdbc:derby://localhost:1527/database/places");
//Initializing the prepared statement with select SQL
PreparedStatement preparedStatement = connection.prepareStatement
("select * from city"); 
//Executing the prepared statement and retrieving results
ResultSet resultSet = preparedStatement.executeQuery();
int code;
String name;
while(resultSet.next())
{
code = resultSet.getInt("code");
name = resultSet.getString("name").trim();
System.out.printf("Code : %d, Country : %s\n", code, name);
}
//Terminating result set, prepared statement and connection
resultSet.close();
preparedStatement.close();
connection.close();
}catch(SQLException sqlException) 
{ System.out.println(sqlException); } 
// Raised either if the connection is refused or some other technical issue
catch(ClassNotFoundException cnfe) 
{ System.out.println(cnfe); } 
// Raised in case the Driver class is  not found
}
}

Скомпилируйте и выполните приведенный выше код, как это было сделано ранее, и ваше приглашение должно выглядеть так:

И теперь мы закончили управлять Apache Derby с помощью Java. Но ниже приведена дополнительная интересная информация о шаблонах извлечения информации. Эти операции выполняются из командной строки Apache Derby Client, но их можно легко изменить для реализации Java.

Присоединяется:

Ниже приведены некоторые джойны с их лаконичным описанием:

Inner Join: This is a join between two tables with an explicit join clause.
Left Join: This is a join between two tables with an explicit join clause, conserving unmatched rows from the first table.
Right Join: This is a join between two tables with an explicit join clause, conserving unmatched rows from the second table.
Natural Join: This is an inner or outer join between two tables. It has no explicit join clause. Instead, one is created implicitly using the common columns from the two tables.

Некоторые соединения и уважаемые выходы показаны ниже:

select * from state left join country on state.country_code = country.code;

select city.name as "City", state.name as "State", country.name as "Country" from city inner join state on city.state_code = state.code inner join country on state.country_code = country.code order by city.name desc, state.name, country.name;

Вывод:

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

Ищите другие статьи, чтобы получить знания по различным темам, и не стесняйтесь оставлять комментарии, если у вас есть сомнения или предложения.

Какие 10 самых полезных функций Underscore.js?

Что такое декораторы в Python?

Многопоточность в Java

Понимание Apache Derby с использованием Java

Программирование сокетов TCP/IP на Java

Как отправлять HTTP-запросы с помощью React JSX?