Groovy-database
Groovy-データベース
Groovyのgroovy-sqlモジュールは、現在のJavaのJDBCテクノロジーよりも高度な抽象化を提供します。 Groovy sql APIは、さまざまなデータベースをサポートしていますが、その一部を以下に示します。
- HSQLDB
- オラクル
- SQLサーバー
- MySQL *MongoDB
この例では、MySQL DBを例として使用します。 GroovyでMySQLを使用するために最初にすることは、mysqlサイトからMySQL jdbc jarファイルをダウンロードすることです。* MySQLのfor * matを以下に示します。
mysql-connector-java-5.1.38-bin
次に、上記のjarファイルをワークステーションのクラスパスに追加してください。
データベース接続
MySQLデータベースに接続する前に、次のことを確認してください-
- データベースTESTDBを作成しました。
- TESTDBにテーブルEMPLOYEEを作成しました。
- このテーブルには、FIRST_NAME、LAST_NAME、AGE、SEX、およびINCOMEフィールドがあります。
- ユーザーID「testuser」とパスワード「test123」は、TESTDBにアクセスするように設定されています。
- mysql jarファイルをダウンロードし、ファイルをクラスパスに追加したことを確認してください。
- リンクを理解するためにMySQLチュートリアルを実行しました:/mysql/index [MySQL Basics]
次の例は、MySQLデータベース「TESTDB」との接続方法を示しています。
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()
}
}
このスクリプトを実行している間、それは次の結果を生成しています-
5.7.10-log
The Sql.newInstance method is used to establish a connection to the database.
データベーステーブルの作成
データベースに接続した後の次のステップは、データベースにテーブルを作成することです。 次の例は、Groovyを使用してデータベースにテーブルを作成する方法を示しています。 Sqlクラスのexecuteメソッドは、データベースに対してステートメントを実行するために使用されます。
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()
}
}
挿入操作
データベーステーブルにレコードを作成する場合に必要です。
例
次の例は、従業員テーブルにレコードを挿入します。 コードはtry catchブロックに配置されるため、レコードが正常に実行されると、トランザクションはデータベースにコミットされます。 トランザクションが失敗すると、ロールバックが行われます。
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()
}
}
基準に基づいて特定の行のみを選択する場合を考えます。 次のコードは、パラメータープレースホルダーを追加して値を検索する方法を示しています。 上記の例は、次のコードに示すようにパラメーターを取り込むように記述することもできます。 $記号は、sqlステートメントの実行時に値に置き換えることができるパラメーターを定義するために使用されます。
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()
}
}
読み取り操作
任意のデータベースに対するREAD操作は、データベースからいくつかの有用な情報を取得することを意味します。 データベース接続が確立されると、このデータベースにクエリを実行する準備が整います。
読み取り操作は、sqlクラスのeachRowメソッドを使用して実行されます。
構文
eachRow(GString gstring, Closure closure)
結果セットの各行で指定されたClosureを呼び出して、指定されたSQLクエリを実行します。
パラメーター
- Gstring -実行する必要があるsqlステートメント。
- Closure -読み取り操作から取得した行を処理するためのクロージャーステートメント。 結果セットの各行で指定されたClosureを呼び出して、指定されたSQLクエリを実行します。
次のコード例は、従業員テーブルからすべてのレコードを取得する方法を示しています。
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()
}
}
上記のプログラムからの出力は次のようになります-
[Mac, Mohan, 20, M, 2000.0]
更新操作
データベースでのUPDATE操作とは、データベースですでに使用可能な1つ以上のレコードを更新することです。 次の手順は、SEXが「M」であるすべてのレコードを更新します。 ここでは、すべての男性の年齢を1年増やします。
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操作が必要です。 以下は、AGEが20を超えるEMPLOYEEからすべてのレコードを削除する手順です。
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()
}
}
トランザクションの実行
トランザクションは、データの一貫性を保証するメカニズムです。 トランザクションには、次の4つのプロパティがあります-
- Atomicity -トランザクションが完了するか、まったく何も起こりません。
- 一貫性-トランザクションは一貫した状態で開始し、システムを一貫した状態のままにする必要があります。
- 分離-トランザクションの中間結果は、現在のトランザクションの外部では見えません。
- 耐久性-トランザクションがコミットされると、システム障害が発生した後でも効果は持続します。
トランザクションを実装する方法の簡単な例を次に示します。 DELETE操作の前のトピックで、この例をすでに見ました。
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()
コミット操作
コミット操作は、操作を続行し、データベースへのすべての変更を完了するようにデータベースに指示するものです。
上記の例では、これは次のステートメントによって達成されます-
sql.commit()
ロールバック操作
1つ以上の変更に満足せず、それらの変更を完全に元に戻したい場合は、ロールバックメソッドを使用します。 上記の例では、これは次のステートメントによって達成されます-
sql.rollback()
データベースの切断
データベース接続を切断するには、closeメソッドを使用します。
sql.close()