Первым шагом разработки JDBC-приложения является загрузка и регистрация требуемого драйвера, используя менеджер драйверов.
сначала добавить зависимость на библиотеку H2 (или любой другой драйвер БД) в файл pom.xml:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
Как настроить сборку maven
Затем зарегистрировать драйвер программно:
• используя метод forName() , например
Class.forName("org.h2.Driver");// загружаем драйвер JDBC для H2
• используя метод registerDriver()
вручную: • устанавливая системные свойства в IDE??
На следующем шаге необходимо установить связь с БД через объект интерфейса Connection. Вы можете создать несколько объектов Connection в Java-приложении для доступа и извлечения данных из нескольких баз данных. Класс DriverManager предоставляет метод getConnection(), чтобы создать объект Connection . Метод getConnection() - это перезагружаемый метод, который имеет следующие три формы.
1) getConnection (String <url>);//доступ к БД
принимает JDBC URL базы данных в виде <protocol>:<subprotocol>:<subname>
protocol - имя протокола доступа к базе данных, для JDBC, всегда jdbc;
subprotocol - механизм извлечения данных из базы данных, для моста JDBC-ODBC - имя драйвера odbc;
subname - уточнение источника данных,имя базы данных, местоположение сервера базы данных, имя пользователя и пароль доступа к серверу баз данных.
Первый вариант подключения:
String url = "jdbc:odbc:MyDataSource";
Connection con = DriverManager.getConnection(url);
2) getConnection (String <url>, String <username>, String <password>):
принимает JDBC url базы данных, имя пользователя и пароль авторизации пользователя базы данных. Например:
String url = "jdbc:odbc:MyDataSource";
Connection con = DriverManager.getConnection (url,"NewUser","NewPassword");
3) getConnection (String <url>, Properties <properties>)
принимает JDBC URL базы данных и объект java.util.Properties как параметр.
Например:
String url = "jdbc:odbc:MyDataSource";
Properties p = new Properties();//
p.setProperty("user","NewUser");
p.setProperty("password","NewPassword");
Connection con = DriverManager.getConnection(url,p);
На следующем повторяющемся шаге посылаются запросы и извлекаются результаты из базы данных через объект Statement. Объект Connection поддерживает метод createStatement(), чтобы создать объект Statemen, который содержит методы для отправки SQL-запросов к БД
Например:
Connection con = DriverManager.getConnection ("jdbc:odbc:MyDataSource", "NewUser", "NewPassword");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM task WHERE id = ?");
Интерфейс Statement содержит следующие методы для SQL-запросов к базе данных:
ResultSet executeQuery(String str);// выполняет SQL-оператор SELECT и возвращает единственный объект типа ResultSet (Результат, извлеченный из базы данных, сохраняется в поле rs объекта ResultSet. )
int executeUpdate(String str);// выполняет SQL-оператор типа INSERT, DELETE или UPDATE и возвращает номер строки данных, который был назначен после обработки SQL-оператора, модифицирующего БД. Например, int count = stmt.executeUpdate("DELETE FROM task WHERE id = ?");
В результате в переменную целого типа count сохраняется номер текущей позиции БД.
Слой Источник данных DBConnect представляет реализацию источника данных с методами
dbConnect () – создает подключение к БД.
dbDisconnect () – закрывает соединение с БД.
dbExecuteQuery (String queryStmt) выполняет заданный в аргументе queryStmt оператор SQL и возвращает набор данных cachedRowSet.
dbExecuteUpdate (String sqlStmt) выполняет заданные в строке sqlStmt операции обновления, вставки, удаления SQL.
try {
// загружаем драйвер JDBC для H2
Class.forName("org.h2.Driver");
// создаем подключение к базе данных
conn = DriverManager.getConnection("jdbc:h2:./test", "olmin", "123");
// создаем таблицу tasks, если она не существует
Statement stmt = conn.createStatement();
stmt.executeUpdate("CREATE TABLE IF NOT EXISTS TASK (" +
"id INTEGER PRIMARY KEY AUTO_INCREMENT," +
"title VARCHAR(255)," +
"time VARCHAR(255)," +
"context VARCHAR(255)," +
"status INTEGER)");
// закрываем соединение с базой данных
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public List<Task> getAllTasks() {
List<Task> tasks = new ArrayList<>();
try {
PreparedStatement ps = conn.prepareStatement("SELECT * FROM TASK");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Task task = new Task(rs.getInt("id"),
rs.getString("title"),
rs.getString("time"),
rs.getString("context"),
rs.getInt("status")
);
tasks.add(task);
}
} catch (SQLException e) {
e.printStackTrace();
}
return tasks;
}