Java, Groovy и базы данных

Продолжая осваивать язык Groovy, добрался, наконец, до работы с базами данных. Прежде, чем приводить пример кода, хотелось бы несколько слов сказать о механизме JDBC, делающим работу Java-программиста с базами данных весьма эффективной.


Начнем с идеологии и истории. Что стало почвой для появления Java? Да то, что к началу 90-х в мире программирования накопилось множество полезных концепций (объектно-ориентированное программирование, сетевое программирование, поддержка национальных кодировок, GUI и много чего еще) и никто до создателей Java не удосужился собрать это всё воедино на хорошем профессиональном и коммерческом уровне уровне. Java как раз и стала вместилищем всего прогрессивного, причем с максимальным (по тем временам) уровнем абстракции от технической рутины программирования, такой, например, как выделение памяти и забота об утилизации отработанных объектов. Т.е. программист получал возможность сосредоточиться на предметной области.

Одной из полезных концепций, включенных в состав стандартных пакетов Java, стала работа с реляционными базами данных. Их разновидностей к середине 90-х расплодилось великое множество. Большинство поддерживало язык запросов SQL, уже очень хорошо сформировавшийся и закрепленный стандартом 1992 года. Но если запросы к базам данных выполнялись на едином языке (с вариациями, конечно, но все-таки), то организация файлового пространства, соединение с БД и т.п. вспомогательные операции разнились от провайдера к провайдеру. Чтобы избавиться от головной боли, связанной с этой спецификой, и были разработаны инструменты JDBC (Java Data Base Connectivity).

Суть JDBC в том, что каждый провайдер баз данных, (например, Oracle, PostgreSQL, MySQL, SQLite, Derby и т.п.) разрабатывает некую прослойку, через которую можно подключиться к БД, а далее работать с ней не сильно задумываясь о том, с какой-же разновидностью мы имеем дело. Для этого нужен лишь драйвер, поставляемый в виде jar-архива, и URL, в котором указывается тип базы данных, ее имя, имя пользователя, пароль, ну и изредка другая вспомогательная информация. Пример URL для PostgreSQL:

jdbc : postgresql://localhost/testdb?user=postgres&password=123


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

И все-таки написание программ для соединения с базами данных посредством JDBC — дело унылое. Требуется, как правило, 1-2 десятка строк, в зависимости от того, насколько надежно мы хотим перехватывать возможные исключения, варьировать типы баз данных, пользователей, пароли и т.п. То есть получается, что Java предлагает недостаточно высокий уровень абстракции для работы с БД. Может для середины 90-х JDBC и был прорывом, но 15 лет спустя хочется чего-то большего.

Большее предлагает язык Groovy, являющийся квинтэссенцией, «вытяжкой» самых-самых полезных вещей из Java, да еще и с лаконичным синтаксисом. Мало того, что в Groovy соединение с любой поддерживающей JDBC базой данных устанавливается одной строкой, так еще и SQL-синтаксис для формирования БД можно включить прямо в скрипт, и это немаловажно! Модульность в программировании — когда отдельные фрагменты кода распределяются по отдельным файлам — это, конечно, великая вещь, но всё хорошо в меру и чрезмерная рассредоточенность плавно перерастает в шизофрению, лекарством от которой и призван быть Groovy.

Вот фрагмент кода, соединяющийся с базой PostgreSQL и формирующий таблицы баз данных. Если в структуре БД что-то хочется изменить — меняем смело SQL внутри тройных кавычек и перезапускаем скрипт без компиляции.

#!/usr/bin/groovy

import groovy.sql.Sql

db = Sql.newInstance('jdbc : postgresql:infotester?user=yababay', '', '', 'org.postgresql.Driver')
db.execute '''
	DROP TABLE IF EXISTS RAW_DATA;
	CREATE TABLE RAW_DATA (
		TS TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
		B64 TEXT NOT NULL
	);
        -- Да всё что угодно, хоть тысячу  SQL-строк 
        -- с красивыми отступами, комментариями, шахматами и поэтессами!
'''


Остается лишь скачать нужный JDBC-драйвер и положить его в каталог

~/.groovy/lib


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

Комментарии (3)

RSS свернуть / развернуть
+
0
КРАСИВО и КРУТО!
И положить в /LIB — я люблю и уважаю! ( полюбил от С )
Но как представлю сколько надо всю эту прелесть надо настраивать...
avatar

Markony

  • 03 мая 2010, 13:14
+
0
Я устанавливал так:

mtaalamu.ru/blog/coding/819.html

Но там, вроде, есть способы и попроще, вплоть до setup.exe-инсталляторов и deb-пакетов.
avatar

yababay

  • 03 мая 2010, 14:13
+
0
avatar

Markony

  • 03 мая 2010, 18:44

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.