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()