Groovy - Veritabanı
Groovy'nin groovy-sql modülü, mevcut Java'nın JDBC teknolojisi üzerinde daha yüksek düzeyde bir soyutlama sağlar. Groovy sql API, bazıları aşağıda gösterilen çok çeşitli veritabanlarını destekler.
- HSQLDB
- Oracle
- SQL Server
- MySQL
- MongoDB
Örneğimizde, örnek olarak MySQL DB kullanacağız. MySQL'i Groovy ile kullanmak için yapılacak ilk şey MySQL jdbc jar dosyasını mysql sitesinden indirmektir.The forMySQL'in matı aşağıda gösterilecektir.
mysql-connector-java-5.1.38-bin
Ardından, yukarıdaki jar dosyasını iş istasyonunuzdaki sınıf yoluna eklediğinizden emin olun.
Veritabanı Bağlantısı
Bir MySQL veritabanına bağlanmadan önce aşağıdakilerden emin olun -
- Bir TESTDB veritabanı oluşturdunuz.
- TESTDB'de EMPLOYEE tablosu oluşturdunuz.
- Bu tabloda FIRST_NAME, LAST_NAME, AGE, SEX ve INCOME alanları var.
- "Testuser" kullanıcı kimliği ve "test123" şifresi TESTDB'ye erişmek için ayarlanmıştır.
- Mysql jar dosyasını indirdiğinizden ve dosyayı sınıf yolunuza eklediğinizden emin olun.
- MySQL Temellerini anlamak için MySQL eğitiminden geçtiniz
Aşağıdaki örnek, MySQL veritabanı "TESTDB" ile nasıl bağlanılacağını gösterir.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args) {
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB',
'testuser', 'test123', 'com.mysql.jdbc.Driver')
// Executing the query SELECT VERSION which gets the version of the database
// Also using the eachROW method to fetch the result from the database
sql.eachRow('SELECT VERSION()'){ row ->
println row[0]
}
sql.close()
}
}
Bu komut dosyasını çalıştırırken aşağıdaki sonucu üretiyor -
5.7.10-log
The Sql.newInstance method is used to establish a connection to the database.
Veritabanı Tablosu Oluşturma
Veritabanına bağlandıktan sonraki adım, veritabanımızda tabloları oluşturmaktır. Aşağıdaki örnek, Groovy kullanılarak veritabanında nasıl tablo oluşturulacağını gösterir. Sql sınıfının execute yöntemi, veritabanına karşı ifadeleri yürütmek için kullanılır.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args) {
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
'test123', 'com.mysql.jdbc.Driver')
def sqlstr = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
sql.execute(sqlstr);
sql.close()
}
}
İşlem Ekle
Kayıtlarınızı bir veritabanı tablosunda oluşturmak istediğinizde gereklidir.
Misal
Aşağıdaki örnek, çalışan tablosuna bir kayıt ekleyecektir. Kod, bir try catch bloğuna yerleştirilir, böylece kayıt başarılı bir şekilde yürütülürse, işlem veritabanına kaydedilir. İşlem başarısız olursa, geri alma yapılır.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args) {
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
'test123', 'com.mysql.jdbc.Driver')
sql.connection.autoCommit = false
def sqlstr = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try {
sql.execute(sqlstr);
sql.commit()
println("Successfully committed")
}catch(Exception ex) {
sql.rollback()
println("Transaction rollback")
}
sql.close()
}
}
Bir kritere göre yalnızca belirli satırları seçmek isteyip istemediğinizi varsayalım. Aşağıdaki kodlar, değerleri aramak için bir parametre yer tutucusunu nasıl ekleyebileceğinizi gösterir. Yukarıdaki örnek, aşağıdaki kodda gösterildiği gibi parametreleri almak için de yazılabilir. $ Sembolü, daha sonra sql ifadesi yürütüldüğünde değerlerle değiştirilebilecek bir parametre tanımlamak için kullanılır.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args) {
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
'test123', 'com.mysql.jdbc.Driver')
sql.connection.autoCommit = false
def firstname = "Mac"
def lastname ="Mohan"
def age = 20
def sex = "M"
def income = 2000
def sqlstr = "INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX,
INCOME) VALUES " + "(${firstname}, ${lastname}, ${age}, ${sex}, ${income} )"
try {
sql.execute(sqlstr);
sql.commit()
println("Successfully committed")
} catch(Exception ex) {
sql.rollback()
println("Transaction rollback")
}
sql.close()
}
}
OKUMA İşlemi
Herhangi bir veritabanı üzerinde OKUMA İşlemi, veritabanından bazı yararlı bilgileri almak anlamına gelir. Veritabanı bağlantımız kurulduktan sonra, bu veritabanına bir sorgulama yapmaya hazırsınız.
Okuma işlemi sql sınıfının eachRow yöntemi kullanılarak gerçekleştirilir.
Sözdizimi
eachRow(GString gstring, Closure closure)
Sonuç kümesinin her satırıyla verilen Kapanışı çağırarak verilen SQL sorgusunu gerçekleştirir.
Parameters
Gstring - Yürütülmesi gereken sql ifadesi.
Closure- Okuma işleminden alınan satırları işlemek için kapanış ifadesi. Sonuç kümesinin her satırıyla verilen Kapanışı çağırarak verilen SQL sorgusunu gerçekleştirir.
Aşağıdaki kod örneği, tüm kayıtların çalışan tablosundan nasıl getirileceğini gösterir.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args) {
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
'test123', 'com.mysql.jdbc.Driver')
sql.eachRow('select * from employee') {
tp ->
println([tp.FIRST_NAME,tp.LAST_NAME,tp.age,tp.sex,tp.INCOME])
}
sql.close()
}
}
Yukarıdaki programdan elde edilen çıktı -
[Mac, Mohan, 20, M, 2000.0]
Güncelleme İşlemi
GÜNCELLEME Herhangi bir veritabanı üzerinde işlem, veritabanında zaten mevcut olan bir veya daha fazla kaydı güncellemek anlamına gelir. Aşağıdaki prosedür, SEX olan tüm kayıtları 'M' olarak günceller. Burada tüm erkeklerin YAŞ'ını bir yıl artırıyoruz.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args){
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
'test@123', 'com.mysql.jdbc.Driver')
sql.connection.autoCommit = false
def sqlstr = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M'"
try {
sql.execute(sqlstr);
sql.commit()
println("Successfully committed")
}catch(Exception ex) {
sql.rollback()
println("Transaction rollback")
}
sql.close()
}
}
DELETE İşlemi
Veritabanınızdan bazı kayıtları silmek istediğinizde DELETE işlemi gereklidir. Aşağıda, AGE'nin 20'den fazla olduğu ÇALIŞAN'dan tüm kayıtları silme prosedürü verilmiştir.
import java.sql.*;
import groovy.sql.Sql
class Example {
static void main(String[] args) {
// Creating a connection to the database
def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',
'test@123', 'com.mysql.jdbc.Driver')
sql.connection.autoCommit = false
def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
try {
sql.execute(sqlstr);
sql.commit()
println("Successfully committed")
}catch(Exception ex) {
sql.rollback()
println("Transaction rollback")
}
sql.close()
}
}
İşlemlerin Gerçekleştirilmesi
İşlemler, veri tutarlılığını sağlayan bir mekanizmadır. İşlemler aşağıdaki dört özelliğe sahiptir -
Atomicity - Ya bir işlem tamamlanır ya da hiçbir şey olmaz.
Consistency - Bir işlem tutarlı bir durumda başlamalı ve sistemi tutarlı bir durumda bırakmalıdır.
Isolation - Bir işlemin ara sonuçları cari işlemin dışında görünmez.
Durability - Bir işlem yapıldığında, sistem hatasından sonra bile etkiler kalıcıdır.
İşte işlemlerin nasıl uygulanacağına dair basit bir örnek. Bu örneği daha önce SİLME işleminin önceki konumuzdan görmüştük.
def sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20"
try {
sql.execute(sqlstr);
sql.commit()
println("Successfully committed")
}catch(Exception ex) {
sql.rollback()
println("Transaction rollback")
}
sql.close()
İşlemi Tamamla
Kaydetme işlemi, veritabanına işleme devam etmesini ve veritabanındaki tüm değişiklikleri sonuçlandırmasını söyleyen şeydir.
Yukarıdaki örneğimizde, bu aşağıdaki ifadeyle elde edilir -
sql.commit()
Geri Alma İşlemi
Bir veya daha fazla değişiklikten memnun değilseniz ve bu değişiklikleri tamamen geri almak istiyorsanız, geri alma yöntemini kullanın. Yukarıdaki örneğimizde, bu aşağıdaki ifadeyle elde edilir -
sql.rollback()
Veritabanlarının Bağlantısını Kesme
Veritabanı bağlantısını kesmek için, kapatma yöntemini kullanın.
sql.close()