Подключение базы данных MySQL с помощью JDBC
Основными элементами для успешного подключения являются:
1. Строка подключения JDBC (например: jdbc:mysql://localhost:3306/test).
2. Имя пользователя (root).
3. Пароль (root).
4. База данных с некоторым количеством таблиц (например, база данных книг).
Строка подключения для MySQL начинается с jdbc:mysql. Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В случае использования локального компьютера в качестве сервера базы данных это localhost с портом по умолчанию 3306. Следующая часть – test – имя базы данных, которая уже существует в MySQL. Если база данных еще не создана, то используйте следующие операторы:
CREATE DATABASE `test` CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE `books` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`author` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO test.books (id, `name`, author)
VALUES (1, 'Effective Java', 'Joshua Bloch');
INSERT INTO test.books (id, `name`, author)
VALUES (2, 'Java Concurrency in Practice', 'Brian Goetz');
Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close() может кинуть исключение, что приведет к утечке ресурсов.
package java_mysql_example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Простой пример Java программы для соединения с MySQL базой
*/
public class JavaToMySQL {
// JDBC URL, имя пользователя и пароль MySQL сервера
private static final String url = "jdbc:mysql://localhost:3306/test";
private static final String user = "root";
private static final String password = "root";
// JDBC переменные для открытия и управления соединением
private static Connection con;
private static Statement stmt;
private static ResultSet rs;
public static void main(String args[]) {
String query = "select count(*) from books";
try {
// открываем соединение к MySQL серверу
con = DriverManager.getConnection(url, user, password);
// получаем Statement объект для выполнения запроса
stmt = con.createStatement();
// выполняем SELECT запрос
rs = stmt.executeQuery(query);
while (rs.next()) {
int count = rs.getInt(1);
System.out.println("Общее количество записей в таблице books: " + count);
}
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
} finally {
//закрываем соединение
try { con.close(); } catch(SQLException se) {
/*can't do anything */
}
try { stmt.close(); } catch(SQLException se) {
/*can't do anything */
}
try { rs.close(); } catch(SQLException se) {
/*can't do anything */
}
}
}
}
Успешный запуск программы выведет на экран следующее
Total number of books in the table: 2
Получение данных с помощью SELECT-запроса в JDBC
Для получения данных из БД выполняется SELECT-запрос. В первом примере SELECT-запрос возвращал только количество строк. Такжеможно вернуть само содержание строк. Большая часть программы остается без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet:
String query = "select id, name, author from books";
rs = stmt.executeQuery(query);
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String author = rs.getString(3);
System.out.printf("id: %d, name: %s, author: %s %n", id, name, author);
}
Этот код выведет на экран следующее:
id: 1, name: Effective Java, author: Joshua Bloch
id: 2, name: Java Concurrency in Practice, author: Brian Goetz
Метод rs.getInt(1) используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1) вернет значение первого столбца как целое число. В случае, если указать неверный индекс (многие разработчики вызывают rs.getInt(0) для получения первого столбца), выбросится исключение InvalidColumnIndexException. Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt("id"). Метод getString() используется для получения строковых значений из базы (например, VARCHAR). Цикл будет выполняться, пока rs.next() не вернет false. Это значит, что строки закончились. В примере в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.
Дата добавления: 2017-01-26; просмотров: 1781;