Работа с базами данных с помощью JDBC драйвера

В этом уроке я бы хотел вас научить работать с базами данных MySQL, PostgreSQL, Oracle. А именно как подключится и выполнять SQL запросы к базе с помощью java.

Что такое JDBC?

JDBC Driver — (Java DataBase Connectivity — соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE.

Зачем нужен JDBC?

JDBC — позволяет получать доступ к БД, а также выполнять к ней SQL запросы.

Шаг 1.

Скачиваем jar файл JDBC драйвера.

MySQLhttp://dev.mysql.com/downloads/connector/j/

PostqreSLQhttp://jdbc.postgresql.org/download.html

Oraclehttp://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

Шаг 2.

Подключение к БД Mysql:

1
2
3
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password");
conn.close();

Подключение к БД PostgreSQL:

1
2
3
Class.forName("org.postgresql.Driver");
Connection connection = DriverManager.getConnection("jdbc:postgresql://hostname:port/dbname","username", "password");
connection.close();

Подключение к БД Oracle:

1
2
3
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:mkyong","username","password");
connection.close();

В 1-й строке мы указываем наш JDBC драйвер. Не забудьте добавить его в ClassPath иначе его компилятор его не увидит.
Во 2-й строке JDBC Manager который открывает соединение с базой данных и обеспечит нам дальнейшее обращение к ней.
И последняя строка закрывает соединение с БД.

Желательно строку для определения JDBC поместить в блок try для того чтобы контролировать его наличия в вашем приложении.

1
2
3
4
5
6
7
try {
	Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
	System.out.println("Where is your MySQL JDBC Driver?");
	e.printStackTrace();
	return;
}

Шаг 3. Создание таблиц в БД.

Вынесем в отдельный метод соединение с БД.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private static Connection getDBConnection() {
	Connection dbConnection = null;
	try {
		Class.forName(DB_DRIVER);
	} catch (ClassNotFoundException e) {
		System.out.println(e.getMessage());
	}
	try {
		dbConnection = DriverManager.getConnection(DB_CONNECTION, DB_USER,DB_PASSWORD);
		return dbConnection;
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	}
	return dbConnection;
}

Этот метод будет создавать в БД таблицу:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private static void createDbUserTable() throws SQLException {
	Connection dbConnection = null;
	Statement statement = null;
 
	String createTableSQL = "CREATE TABLE DBUSER("
			+ "USER_ID NUMBER(5) NOT NULL, "
			+ "USERNAME VARCHAR(20) NOT NULL, "
			+ "CREATED_BY VARCHAR(20) NOT NULL, "
			+ "CREATED_DATE DATE NOT NULL, " + "PRIMARY KEY (USER_ID) "
			+ ")";
 
	try {
		dbConnection = getDBConnection();
		statement = dbConnection.createStatement();
 
                // выполнить SQL запрос
		statement.execute(createTableSQL);
		System.out.println("Table \"dbuser\" is created!");
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	} finally {
		if (statement != null) {
			statement.close();
		}
		if (dbConnection != null) {
			dbConnection.close();
		}
	}
}

и в main методе вызываем метод createDbTable() который создаст таблицу в БД.

1
2
3
4
5
6
7
public static void main(String[] argv) {
	try {
		createDbUserTable();
	} catch (SQLException e) {
		System.out.println(e.getMessage());
	}
}

В результате вы должны получить:

CREATE TABLE DBUSER(
  USER_ID NUMBER(5) NOT NULL, 
  USERNAME VARCHAR(20) NOT NULL, 
  CREATED_BY VARCHAR(20) NOT NULL, 
  CREATED_DATE DATE NOT NULL, 
  PRIMARY KEY (USER_ID) 
)
TABLE "user" IS created!

Шаг 4. Добавление новой записи в БД.

1
2
3
4
String insertTableSQL = "INSERT INTO DBUSER"
			+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) " + "VALUES"
			+ "(1,'mkyong','system', " + "to_date('"
			+ getCurrentTimeStamp() + "', 'yyyy/mm/dd hh24:mi:ss'))";

метод который будет возвращать текущую дату и время:

1
private static String getCurrentTimeStamp() { Date today = new Date(); return dateFormat.format(today.getTime()); }

И выполняем наш SQL запрос который лежит в переменной insertTableSQL

1
statement.executeUpdate(insertTableSQL);

Шаг 5. Получение данных с БД.

1
String selectTableSQL = "SELECT USER_ID, USERNAME from DBUSER";

Выполняем запрос:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
try {
	dbConnection = getDBConnection();
	statement = dbConnection.createStatement();
 
	// выбираем данные с БД
	ResultSet rs = statement.executeQuery(selectTableSQL);
 
	// И если что то было получено то цикл while сработает   
	while (rs.next()) {
		String userid = rs.getString("USER_ID");
		String username = rs.getString("USERNAME");
 
		System.out.println("userid : " + userid);
		System.out.println("username : " + username);
	}
} catch (SQLException e) {
	System.out.println(e.getMessage());
}

Шаг 6. Удаление данных с БД.

1
String deleteTableSQL = "DELETE DBUSER WHERE USER_ID = 1";

Выполняем запрос на удаление:

1
2
3
4
5
6
7
8
9
10
try {
	dbConnection = getDBConnection();
	statement = dbConnection.createStatement();
 
	// выполняем запрос delete SQL
	statement.execute(deleteTableSQL);
	System.out.println("Record is deleted from DBUSER table!");
} catch (SQLException e) {
	System.out.println(e.getMessage());
}

Шаг 7. Обновление данных в БД.

1
String updateTableSQL = "UPDATE DBUSER SET USERNAME = 'mkyong_new' WHERE USER_ID = 1";

Выполняем запрос на обновление записи:

1
2
3
4
5
6
7
8
9
10
11
try {
	dbConnection = getDBConnection();
	statement = dbConnection.createStatement();
 
	// выполняем запрос update SQL
	statement.execute(updateTableSQL);
 
	System.out.println("Record is updated to DBUSER table!");
} catch (SQLException e) {
	System.out.println(e.getMessage());
}

Выводы.

Все действия с любой базой данных выполняются через SQL запросы, то есть нам достаточно знать SQL для манипуляцией данными в БД.

Автор: Александр Барчук
Источник

Comments are closed