2009年10月31日土曜日

groovyとPostgreSQLで制約を一覧表示する

groovyとPostgreSQLで制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/test1",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
cls.relname,
cons.conname,
cons.contype,
cons.consrc
from
pg_constraint cons
join pg_class cls
on (cons.conrelid = cls.oid)
"""

sql.eachRow(query){
// テーブル名
println "relname:${it.relname}"
// 制約名
println "conname:${it.conname}"
// 制約タイプ
println "contype:${it.contype}"
// 制約場合、制約のexpression
println "consrc:${it.consrc}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_constraint
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-constraint.html

2009年10月30日金曜日

groovyとPostgreSQLとquartzの組み合わせでジョブ情報を表示する

groovyとPostgreSQLとquartzの組み合わせでジョブ情報を表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// ジョブ情報の表示
job = sched.getJobDetail("job1", "group1")
if( job != null ){
println("name:" + job.name)
println("full name:" + job.fullName)
println("group:" + job.group)
println("job class:" + job.jobClass.name)
}
sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとSQL Serverでキー制約を一覧表示する

groovyとSQL Serverでキー制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
obj.name as table_name,
kc.name,
kc.is_system_named
from sys.key_constraints kc
join sys.objects obj
on (kc.parent_object_id = obj.object_id)
order by 1,2
"""
sql.eachRow(query){
// テーブル名
println("table_name:${it.table_name}")
// キー制約名
println("name:${it.name}")
// システムにより生成された名前か
println("is_system_named:${it.is_system_named}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.key_constraints (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms174321.aspx

2009年10月29日木曜日

groovyとSQL Serverでチェック制約を一覧表示する

groovyとSQL Serverでチェック制約を一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select
chk.name,
chk.definition,
obj.name as table_name
from sys.check_constraints chk
join sys.objects obj
on (chk.parent_object_id = obj.object_id)
"""
sql.eachRow(query){
// CHECK制約名
println("name:${it.name}")
// 定義
println("definition:${it.definition}")
// テーブル名
println("table_name:${it.table_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.check_constraints (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187388.aspx

2009年10月28日水曜日

groovyとSQL ServerでBULK INSERTを使用してCSVを取り込む

groovyとSQL ServerでBULK INSERTを使用してCSVを取り込むには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
BULK INSERT company
FROM 'C:\\share\\company.csv'
WITH
(
FIELDTERMINATOR =',',
ROWTERMINATOR ='\\n'
)
"""

// バルクインサートの実行
sql.execute(query)


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
BULK INSERT (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188365.aspx

groovyとSQL Serverでインデックスの無効化・リビルドを行う

groovyとSQL Serverでインデックスの無効化・リビルドを行うには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table = "company"
index = "uk_company_name"
// インデックスの無効化
sql.execute("alter index " + index + " ON ${table} DISABLE")
// 無効化されたインデックスの表示
sql.eachRow("select * from sys.indexes where is_disabled = 1"){
// インデックス名
println("name:${it.name}")
println "----"
}
// インデックスのリビルド
sql.execute("alter index " + index + " ON ${table} REBUILD")
// 無効化されたインデックスの表示
sql.eachRow("select * from sys.indexes where is_disabled = 1"){
// インデックス名
println("name:${it.name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
ALTER INDEX (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188388.aspx

2009年10月27日火曜日

groovyとSQL Serverで指定期間ウエイトする

groovyとSQL Serverで指定期間ウエイトするには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
waitfor delay '00:00:30'
"""
println(new Date())
sql.execute(query)
println(new Date())


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
WAITFOR (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187331.aspx

2009年10月26日月曜日

groovyとSQL Serverで自動統計更新オプションを表示する

groovyとSQL Serverで自動統計更新オプションを表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

// 指定したテーブル/インデックス等の自動統計更新オプション
query = """
exec sp_autostats 'employee'
"""
sql.eachRow(query){
// インデックスまたは統計名
println("Index Name::${it[0]}")
// AUTO_UPDATE_STATISTICSオプションの値
println("AUTOSTATS:${it[1]}")
// 統計の最終更新日時
println("Last Updated:${it[2]}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sp_autostats (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms188775.aspx

2009年10月25日日曜日

groovyとPostgreSQLとquartzの組み合わせでトリガーを一覧表示する

groovyとPostgreSQLとquartzの組み合わせでトリガーを一覧表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

trgGroupNames = sched.getTriggerGroupNames()
println("total number of trigger group names:" + trgGroupNames.length)
for( trgGroupName in trgGroupNames ){
println("trigger group name:" + trgGroupName)
trgNames = sched.getTriggerNames(trgGroupName)
// トリガーを列挙
for( trgName in trgNames ){
println("trigger name:" + trgName)
}
}

sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとSQL Serverで現在のセッションの言語を取得する

groovyとSQL Serverで現在のセッションの言語を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select @@language as lg
"""
sql.eachRow(query){
// 現在のセッションの言語を返す
println("lg:${it.lg}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
@@SERVERNAME (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187944.aspx

2009年10月24日土曜日

groovyとSQL Serverでサーバ名を取得する

groovyとSQL Serverでサーバ名を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select @@servername as sn
"""
sql.eachRow(query){
// サーバ名を返す
println("sn:${it.sn}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
@@SERVERNAME (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms187944.aspx

2009年10月23日金曜日

groovyとPostgreSQLとquartzの組み合わせでcron風にJobをスケジューリングする

groovyとPostgreSQLとquartzの組み合わせでcron風にJobをスケジューリングするには、以下のコードを実行します。

ジョブコード(HelloQuartzJob.groovy)

import org.quartz.*

class HelloQuartzJob implements Job
{
// ジョブ実行メソッド
void execute(JobExecutionContext context)
throws JobExecutionException
{
println("Hello, Quartz!" + new Date())
}
}


quartz設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false


quartzスタンドアロン実行用コード(StartQuartz.groovy)(exitと入力すると終了する)

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
sf = new StdSchedulerFactory("./myquartz.properties")
//sched = sf.getScheduler()

// スケジューラを開始
//sched.start();

server = new QuartzServer()
server.serve(sf, true)


ジョブスケジューリング用コード(RegisterHelloQuartzJob.groovy)

import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// ジョブ定義
JobDetail job = new JobDetail(
// ジョブ名
"job1",
// グループ名
"group1",
// ジョブクラス
HelloQuartzJob.class
)

// cron風のtrigger
trigger = new CronTrigger(
// トリガー名
"trigger1",
// グループ名
"group1",
// ジョブ名
"job1",
// グループ名
"group1",
// 月曜日から金曜日の21時
"0 0 21 ? * MON-FRI");
sched.scheduleJob(job, trigger)

sched.shutdown(true)


実行するときは、コマンドプロンプトから
groovy StartQuartz.groovyでスタンドアロンで実行させ、
別のコマンドプロンプトからgroovy RegisterHelloQuartzJob.groovyで
ジョブを登録します。

groovyでSQL Serverのバージョン、プロセッサアーキテクチャ、ビルド日、OSを取得する

groovyでSQL Serverのバージョン、プロセッサアーキテクチャ、ビルド日、OSを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select @@version as ver
"""
sql.eachRow(query){
// SQL Serverのバージョン、プロセッサアーキテクチャ、ビルド日、OS
println("ver:${it.ver}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
@@VERSION (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms177512.aspx

2009年10月22日木曜日

groovyとSQL Serverで現在のログインユーザ名とデータベースユーザ名を取得する

groovyとSQL Serverで現在のログインユーザ名とデータベースユーザ名を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """
select system_user as su, user as du
"""
sql.eachRow(query){
// ログインユーザ名
println("su:${it.su}")
// データベースユーザ名
println("du:${it.du}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
USER (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms186738.aspx

2009年10月21日水曜日

groovyとSQL Serverで接続しているデータベース名を取得する

groovyとSQL Serverで接続しているデータベース名を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """select
db_name() as dbname
"""

sql.eachRow(query){
// 接続しているデータベース名
println("dbname:${it.dbname}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
DB_NAME (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms189753.aspx

2009年10月20日火曜日

groovyとPostgreSQLでサーバー開始時間とバージョンを取得する

groovyとPostgreSQLでサーバー開始時間とバージョンを取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
pg_postmaster_start_time() as st,
version() as ver
"""

sql.eachRow(query){
// サーバー開始時間
println "st:${it.st}"
// PostgreSQLのversion
println "ver:${it.ver}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_postmaster_start_time(), version()
http://www.postgresql.org/docs/8.4/interactive/functions-info.html

2009年10月19日月曜日

groovyとPostgreSQLとquartzの組み合わせでトリガーグループを一覧表示する

groovyとPostgreSQLとquartzの組み合わせでトリガーグループを一覧表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

// トリガーグループ名を列挙
trgGroupNames = sched.getTriggerGroupNames()
println("total number of trigger group names:" + trgGroupNames.length)
for( trgGroupName in trgGroupNames ){
println("trigger group name:" + trgGroupName)
}

sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

groovyとPostgreSQLでサーバーとクライアントのIPアドレスを取得する

groovyとPostgreSQLでサーバーとクライアントのIPアドレスを取得するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
inet_client_addr() as ica,
inet_client_port() as icp,
inet_server_addr() as isa,
inet_server_port() as isp
"""

sql.eachRow(query){
// クライアントのアドレス
println "ica:${it.ica}"
// クライアントのポート
println "icp:${it.icp}"
// サーバのアドレス
println "isa:${it.isa}"
// サーバのポート
println "isp:${it.isp}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
inet_client_addr(), inet_client_port(),
inet_server_addr(), inet_server_port()
http://www.postgresql.org/docs/8.4/interactive/functions-info.html

2009年10月18日日曜日

groovyとPostgreSQLで接続しているDB名と接続ユーザ名を取得する

groovyとPostgreSQLで接続しているDB名と接続ユーザ名を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
current_database() as cdb,
current_user
"""

sql.eachRow(query){
// 接続しているDB名
println "cdb:${it.cdb}"
// 接続しているユーザ名
println "current_user:${it.current_user}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
current_database(), current_user
http://www.postgresql.org/docs/8.4/interactive/functions-info.html

2009年10月17日土曜日

groovyとPostgreSQLでインデックスを一覧表示する

groovyとPostgreSQLでインデックスを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

table = "users"
query = """select
pgc.relname as index_name,
pgct.relname as table_name,
pg_get_indexdef(pgi.indexrelid) as definition
from
pg_index pgi
join pg_class pgc
on (pgc.oid = pgi.indexrelid)
join pg_class pgct
on (pgct.oid = pgi.indrelid)
where
pgct.relname = ${table}
"""

sql.eachRow(query){
// インデックス名
println "index_name:${it.index_name}"
// インデックスが貼られているテーブル名
println "table_name:${it.table_name}"
// インデックスの定義
println "definition:${it.definition}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_index
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-index.html

pg_get_indexdef
http://www.postgresql.org/docs/8.4/interactive/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE

2009年10月16日金曜日

groovyとPostgreSQLでビューを一覧表示する

groovyとPostgreSQLでビューを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = """select
schemaname,
viewname,
viewowner,
definition
from pg_views
where schemaname = 'public'
"""

sql.eachRow(query){
// スキーマ名
println "schemaname:${it.schemaname}"
// ビュー名
println "viewname:${it.viewname}"
// ビューのオーナー
println "viewowner:${it.viewowner}"
// ビューの定義
println "definition:${it.definition}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_views
http://www.postgresql.org/docs/8.4/interactive/view-pg-views.html

2009年10月14日水曜日

groovyでSQL Serverのセッション情報を取得する

groovyでSQL Serverのセッション情報を取得するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = """select
*
from
sys.dm_exec_sessions"""

sql.eachRow(query){
// セッションID
println("session_id:${it.session_id}")
// ログイン時間
println("login_time:${it.login_time}")
// クライアントワークステーションの名前
println("host_name:${it.host_name}")
// ログイン名
println("login_name:${it.login_name}")
// ステータス
println("status:${it.status}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.dm_exec_sessions
http://msdn.microsoft.com/ja-jp/library/ms176013.aspx

groovyとPostgreSQLとquartzの組み合わせでジョブを一覧表示する

groovyとPostgreSQLとquartzの組み合わせでジョブを一覧表示するには、以下のコードを実行します。


import org.quartz.*
import org.quartz.impl.*

// スケジューラ取得
//sf = new StdSchedulerFactory()
sf = new StdSchedulerFactory("./myquartz.properties")
sched = sf.getScheduler()

jobGroupNames = sched.getJobGroupNames()
println("total number of job group names:" + jobGroupNames.length)
for( jobGroupName in jobGroupNames ){
println("job group name:" + jobGroupName)
// ジョブを取得
jobNames = sched.getJobNames(jobGroupName)
for( jobName in jobNames ){
println("job name:" + jobName)
}
}
sched.shutdown(true)


設定ファイル(myquartz.properties)

org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

# データソースの設定
org.quartz.dataSource.QuartzDS.driver = org.postgresql.Driver
org.quartz.dataSource.QuartzDS.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.QuartzDS.user = postgres
org.quartz.dataSource.QuartzDS.password = postgres
org.quartz.dataSource.QuartzDS.maxConnections = 10
org.quartz.dataSource.QuartzDS.validationQuery = select 1

# JDBC JobStore設定
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.dataSource = QuartzDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.clusterCheckinInterval = 15000
org.quartz.jobStore.maxMisfiresToHandleAtATime = 20
org.quartz.jobStore.dontSetAutoCommitFalse = false
org.quartz.jobStore.selectWithLockSQL = SELECT * FROM {0}LOCKS WHERE LOCK_NAME = ? FOR UPDATE
org.quartz.jobStore.txIsolationLevelSerializable = false
org.quartz.jobStore.acquireTriggersWithinLock = false

2009年10月13日火曜日

ScriptomとExcelで新規ブックを作成する

ScriptomとExcelで新規ブックを作成するには、以下のコードを実行します。

import org.codehaus.groovy.scriptom.*;
import org.codehaus.groovy.scriptom.tlb.office.excel.*;

Scriptom.inApartment
{
ea = new ActiveXObject("Excel.Application")
wb = ea.workbooks.add

ea.DisplayAlerts = false

wb.sheets(1).Range("A1").value = "新規作成したブック"

wb.saveAs(new File("test27a.xlsx").canonicalPath)
wb.close
}


実行結果
ScriptomとExcelで出力したブック

動作環境
groovy 1.6.3/JDK6 Update14/Excel 2007

関連情報

2009年10月12日月曜日

groovyとPostgreSQLでテーブルのカラム情報を表示する

groovyとPostgreSQLでテーブルのカラム情報を表示するには、以下のコードを実行します。

import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

table = "users"
query = """select
pc.relname,
pa.attname,
format_type(pty.oid, pa.atttypmod) as ft,
pa.attnotnull
from pg_class pc
join pg_attribute pa
on (pa.attrelid = pc.oid)
join pg_type pty
on (pa.atttypid = pty.oid)
where
pc.relname = ${table}
and pa.attnum >= 1
order by pa.attnum"""

sql.eachRow(query){
// 列名
println "attname:${it.attname}"
// 型
println "ft:${it.ft}"
// NOT NULL
println "attnotnull:${it.attnotnull}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_attribute
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-attribute.html

format_type function
http://www.postgresql.org/docs/8.4/interactive/functions-info.html#FUNCTIONS-INFO-CATALOG-TABLE

2009年10月11日日曜日

groovletsでファイルアップロードする

groovletsでファイルアップロードするには、以下のようなフォームを最初に作成します。

form.groovy
println """
<html>
<head>
<title>Upload Form</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
</head>
<body>
<form method="POST" enctype="multipart/form-data"
action="upload.groovy">
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" value="Upload!" />
</form>
</body>
</html>
"""

次にApache Commons FileUploadでアップロードしたファイルを受け取るgrooveletsを作成します。
// Groovelets
// http://groovy.codehaus.org/Groovlets
// Apache Commons FileUpload1.2.1
// http://commons.apache.org/downloads/download_fileupload.cgi
// Apache Commons IO
// http://commons.apache.org/downloads/download_io.cgi
import org.apache.commons.fileupload.disk.*
import org.apache.commons.fileupload.servlet.*
import org.apache.commons.fileupload.*

// アップロードディレクトリ
uploadDir = "c:\\share\\data\\"
dfif = new DiskFileItemFactory()
sfu = new ServletFileUpload(dfif)
sfu.setHeaderEncoding("UTF-8")

filenames = []
try
{
list = sfu.parseRequest(request)
for(fi in list){
if( !fi.isFormField() ){
filename = new File(fi.getName()).getName()
fi.write(new File(uploadDir + filename))
filenames.add(filename)
}
}
}
catch(FileUploadException fuex)
{
fuex.printStackTrace()
}
println """
<html>
<head>
<title>upload result</title>
</head>
<body>
uploaded file(s):${filenames}
</body>
</html>
"""


web.xmlは以下のように記述します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
</web-app>

Apache Commons FileUpload/IOのjarファイルをdownloadして、libディレクトリに
commons-fileupload-1.2.1.jarとcommons-io-1.4.jarをコピーします。

ビルドのためのgantスクリプト例
sourceDir = 'src'
buildDir = 'build'
stagingDir = 'stage'
deployDir = 'C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps'
groovyDir = 'C:/Program Files/Groovy/Groovy-1.6.3'
warFile = 'gupload.war'

ant.taskdef(name : 'groovyc', classname:'org.codehaus.groovy.ant.Groovyc')

target(compile:'compile java and groovy files.'){
mkdir(dir:buildDir)
javac(srcdir:sourceDir , destdir:buildDir)
groovyc(srcdir:sourceDir, destdir:buildDir)
}

target(war:'packaging'){
depends(compile)
mkdir(dir:"${stagingDir}/WEB-INF/classes")
copy(todir:stagingDir){
fileset(dir:"./", includes:"*.groovy")
}
copy(todir:"${stagingDir}/WEB-INF/lib"){
fileset(dir:"./lib", includes:"*.jar")
}
copy(todir:"${stagingDir}/WEB-INF/classes"){
fileset(dir:buildDir, includes:"*.class")
}
mkdir(dir:"${stagingDir}/WEB-INF/lib")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/groovy-1.6.3.jar")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/asm-2.2.3.jar")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/antlr-2.7.7.jar")
copy(todir:"${stagingDir}/WEB-INF",
file:"./web.xml")

jar(destfile:warFile, basedir:stagingDir)
}

target(deploy:'copy war files to webapps'){
depends(war)
copy(todir:deployDir) {
fileset(dir:"./", includes:"*.war")
}
}

includeTargets << gant.targets.Clean
cleanPattern << '**/*~'
cleanDirectory << buildDir
cleanDirectory << stagingDir

setDefaultTarget(deploy)


動作環境
JDK6 Update16, groovy1.6.3, Apache Tomcat 5.5.28

関連情報
Groovelets
http://groovy.codehaus.org/Groovlets

Apache Commons FileUpload1.2.1のダウンロードページ
http://commons.apache.org/downloads/download_fileupload.cgi

Apache Commons IOのダウンロードページ
http://commons.apache.org/downloads/download_io.cgi

2009年10月10日土曜日

groovyでサーブレット(groovlets)を作成する

groovyでサーブレット(groovlets)は以下のような簡単なコードで作成できます。

Hello.groovy
println """
<html>
<head>
<title>Hello Groovlet</title>
</head>
<body>
Hello, world.${new Date()}
</body>
</html>
"""


web.xmlは以下のように記述します。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
</web-app>


warファイルのデプロイまでおこなうgantスクリプト例
sourceDir = 'src'
buildDir = 'build'
stagingDir = 'stage'
deployDir = 'C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps'
groovyDir = 'C:/Program Files/Groovy/Groovy-1.6.3'
warFile = 'groovlet.war'

ant.taskdef(name : 'groovyc', classname:'org.codehaus.groovy.ant.Groovyc')

target(compile:'compile java and groovy files.'){
mkdir(dir:buildDir)
javac(srcdir:sourceDir , destdir:buildDir)
groovyc(srcdir:sourceDir, destdir:buildDir)
}

target(war:'packaging'){
depends(compile)
mkdir(dir:"${stagingDir}/WEB-INF/classes")
copy(todir:stagingDir){
fileset(dir:"./", includes:"*.groovy")
}
copy(todir:"${stagingDir}/WEB-INF/classes"){
fileset(dir:buildDir, includes:"*.class")
}
mkdir(dir:"${stagingDir}/WEB-INF/lib")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/groovy-1.6.3.jar")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/asm-2.2.3.jar")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/antlr-2.7.7.jar")
copy(todir:"${stagingDir}/WEB-INF",
file:"./web.xml")

jar(destfile:warFile, basedir:stagingDir)
}

target(deploy:'copy war files to webapps'){
depends(war)
copy(todir:deployDir) {
fileset(dir:"./", includes:"*.war")
}
}

includeTargets << gant.targets.Clean
cleanPattern << '**/*~'
cleanDirectory << buildDir
cleanDirectory << stagingDir

setDefaultTarget(deploy)


関連情報
Groovelets
http://groovy.codehaus.org/Groovlets

動作環境
JDK6 Update16, groovy1.6.3, Apache Tomcat 5.5.28

2009年10月9日金曜日

groovyとSQL ServerでLinked Server一覧を表示する

groovyとSQL ServerでLinked Server一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = "select\
* \
from\
sys.servers \
where server_id <> 0"

sql.eachRow(query){
// サーバーID名(0はLocal Server)
println("server_id:${it.server_id}")
// Linked Serverのローカル名
println("name:${it.name}")
// Linked Serverの製品名
println("product:${it.product}")
// OLE DB Provider Name
println("provider:${it.provider}")
// OLE DB DataSource Connection Property
println("data_source:${it.data_source}")
println "----"
}

// Linked Server上のテーブルをselectする場合
// SELECT * from [servername\SQLEXPRESS].dbname.dbo.tablename
sql.eachRow("SELECT * from [SQLSRV1\\SQLEXPRESS].test.dbo.customer"){
println("customer_id:${it.customer_id}")
println("customer_name:${it.customer_name}")
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.servers
http://msdn.microsoft.com/en-us/library/ms178530.aspx

2009年10月8日木曜日

groovyとSQL Serverでビュー一覧を表示する

groovyとSQL Serverでビュー一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = "select\
name \
from\
sys.views"

sql.eachRow(query){
// ビュー名
println "name:${it.name}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.views
http://msdn.microsoft.com/en-us/library/ms190334.aspx

2009年10月7日水曜日

groovyとSQL Serverでシノニム一覧を表示する

groovyとSQL Serverでシノニム一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

query = "select\
name,\
base_object_name \
from\
sys.synonyms"

sql.eachRow(query){
// シノニム名
println "name:${it.name}"
// ベースオブジェクトネーム
println "base_object_name:${it.base_object_name}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

関連情報
sys.synonyms
http://msdn.microsoft.com/ja-jp/library/ms189458.aspx

groovyとApache WicketでWeb Applicationを作成する

1.ページクラスの作成

HelloWicket.groovy
import org.apache.wicket.markup.html.*
import org.apache.wicket.markup.html.basic.*

class HelloWicket extends WebPage
{
HelloWicket()
{
add(new Label("message", "Hello Wicket!" + new Date()));
}
}


2.HTMLページの作成
HelloWicket.html
<html>
<head>
<title>hello wicket</title>
</head>
<body>
<span wicket:id="message" id="message" />
</body>
</html>


3.アプリケーションクラスの作成

HelloWicketApp.groovy
import org.apache.wicket.protocol.http.*;

class HelloWicketApp extends WebApplication
{
public Class getHomePage()
{
return HelloWicket.class;
}
}


4.web.xmlの作成
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Wicket Examples</display-name>
<filter>
<filter-name>HelloWicketApp</filter-name>
<filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>HelloWicketApp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HelloWicketApp</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>


5.必要なjarの用意
以下のURLからApache Wicketをダウンロード
http://www.apache.org/dyn/closer.cgi/wicket/1.4.1
apache-wicket-1.4.1.zipを解凍して、wicket-1.4.1.jarをビルド用のlibディレクトリへコピー。

以下のURLからSLF4Jをダウンロード
http://www.slf4j.org/download.html
slf4j-1.5.8.zipを解凍して、slf4j-api-1.5.8.jar,slf4j-jdk14-1.5.8.jarをビルド用のlibディレクトリへコピー。

6.gantファイルの作成

build.gant

sourceDir = 'src'
buildDir = 'build'
stagingDir = 'stage'
deployDir = 'C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps'
groovyDir = 'C:/Program Files/Groovy/Groovy-1.6.5'
warFile = 'hellowicket.war'

ant.taskdef(name : 'groovyc', classname:'org.codehaus.groovy.ant.Groovyc')


target(compile:'compile java and groovy files.'){
mkdir(dir:buildDir)


javac(srcdir:sourceDir , destdir:buildDir)

def cpath = path {
pathelement(location: "./lib/wicket-1.4.1.jar")
pathelement(location: "./lib/slf4j-api-1.5.8.jar")
}
groovyc(srcdir:sourceDir, destdir:buildDir,
classpath: cpath)

}

target(war:'packaging'){
depends(compile)
mkdir(dir:"${stagingDir}/WEB-INF/classes")
copy(todir:stagingDir){
fileset(dir:"./", includes:"*.groovy")
}
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/groovy-1.6.5.jar")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/asm-2.2.3.jar")
copy(todir:"${stagingDir}/WEB-INF/lib",
file:"${groovyDir}/lib/antlr-2.7.7.jar")
copy(todir:"${stagingDir}/WEB-INF/lib"){
fileset(dir:"./lib", includes:"*.jar")
}
copy(todir:"${stagingDir}/WEB-INF/classes"){
fileset(dir:buildDir, includes:"*.class")
}
copy(todir:"${stagingDir}/WEB-INF/classes"){
fileset(dir:sourceDir, includes:"*.html")
}
mkdir(dir:"${stagingDir}/WEB-INF/lib")
copy(todir:"${stagingDir}/WEB-INF",
file:"./web.xml")

jar(destfile:warFile, basedir:stagingDir)
}

target(deploy:'copy war files to webapps'){
depends(war)
copy(todir:deployDir) {
fileset(dir:"./", includes:"*.war")
}
}

includeTargets << gant.targets.Clean
cleanPattern << '**/*~'
cleanDirectory << buildDir
cleanDirectory << stagingDir

setDefaultTarget(deploy)


7.ビルド
以下のファイル配置になっていることを確認して、gantコマンドでビルド。
build.gant
web.xml
lib/slf4j-api-1.5.8.jar
lib/slf4j-jdk14-1.5.8.jar
lib/wicket-1.4.1.jar
src/HelloWicket.groovy
src/HelloWicket.html
src/HelloWicketApp.groovy

8.Tomcatでの確認
ブラウザでhttp://localhost:8080/hellowicket/にアクセス。

動作環境
JDK6 Update 16, Groovy 1.6.5, Apache Tomcat 5.5.28,
Apche Wicket 1.4.1, SLF4J 1.5.8

関連情報
Apache Wicket

2009年10月6日火曜日

groovyとPostgreSQLでテーブルを列挙する

groovyとPostgreSQLでテーブルを列挙するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/jtrac",
"postgres",
"postgres",
"org.postgresql.Driver")

query = "select schemaname, \
tablename, \
tableowner, \
tablespace, \
hasindexes, \
hasrules, \
hastriggers \
from pg_tables"

sql.eachRow(query){
// スキーマ名
println "schemaname:${it.schemaname}"
// テーブル名
println "tablename:${it.tablename}"
// テーブルオーナー
println "tableowner:${it.tableowner}"
// テーブルスペース
println "tablespace:${it.tablespace}"
// インデックスを持つか
println "hasindexes:${it.hasindexes}"
// ルールを持つか
println "hasrules:${it.hasrules}"
// トリガーを持つか
println "hastriggers:${it.hastriggers}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0, 8.4-701JDBC4

関連情報
pg_tables
http://www.postgresql.org/docs/8.4/interactive/view-pg-tables.html

2009年10月5日月曜日

groovyとPostgreSQLでユーザを列挙する

groovyとPostgreSQLでユーザを列挙するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/postgres",
"postgres",
"postgres",
"org.postgresql.Driver")

query = "select usename, \
usecreatedb, \
usesuper \
from pg_user"

sql.eachRow(query){
// ユーザ名
println "usename:${it.usename}"
// データベースを作成できるか
println "usecreatedb:${it.usecreatedb}"
// スーパーユーザかどうか
println "usesuper:${it.usesuper}"
println "----"
}


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0, 8.4-701JDBC4

関連情報
pg_user
http://www.postgresql.org/docs/8.4/interactive/view-pg-user.html

2009年10月4日日曜日

groovyとPostgreSQLでデータベースを列挙する

groovyとPostgreSQLでデータベースを列挙するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:postgresql://localhost:5432/postgres",
"postgres",
"postgres",
"org.postgresql.Driver")

query = "select datname, \
pg_encoding_to_char(encoding) as encoding, \
datistemplate \
from pg_database"

sql.eachRow(query){
// データベース名
println "datname:${it.datname}"
// エンコーディング
println "encoding:${it.encoding}"
// テンプレートかどうか
println "datistemplate:${it.datistemplate}"
println "----"
}


出力結果例

datname:template1
encoding:UTF8
datistemplate:true
----
datname:template0
encoding:UTF8
datistemplate:true
----
datname:postgres
encoding:UTF8
datistemplate:false
----

省略


動作環境
Groovy 1.6.3, JDK6 Update16, Postgres 8.4.0,
8.4-701JDBC4

関連情報
pg_database
http://www.postgresql.org/docs/8.4/interactive/catalog-pg-database.html

2009年10月3日土曜日

groovyとSQL Serverでインデックスの張られたカラムの情報を表示する

groovyとSQL Serverでインデックスの張られたカラムの情報を表示するには、以下のコードを実行します。


import groovy.sql.Sql

sql = Sql.newInstance(
"jdbc:sqlserver://localhost;databaseName=test1",
"sa",
"sa",
"com.microsoft.sqlserver.jdbc.SQLServerDriver")

table = "test"
query = "select\
indexes.name as index_name,\
index_columns.index_id,\
index_columns.index_column_id,\
columns.name \
from\
sys.tables\
join sys.columns\
on (tables.object_id = columns.object_id)\
join sys.indexes\
on (tables.object_id = indexes.object_id)\
join sys.index_columns\
on (tables.object_id = index_columns.object_id\
and indexes.index_id = index_columns.index_id\
and columns.column_id = index_columns.column_id) \
where\
tables.name = ${table} \
order by indexes.index_id, index_columns.index_column_id"

sql.eachRow(query){
// インデックス名
println "index_name:${it.index_name}"
// インデックスID
println "index_id:${it.index_id}"
// インデックスカラムID
println "index_column_id:${it.index_column_id}"
// カラム名
println "name:${it.name}"
println "----"
}


テスト用テーブル作成スクリプト

create table test
(
test_id numeric(4) ,
test_cycle numeric(4),
test_name varchar(20),
primary key (test_id, test_cycle)
)
go
create unique index uk_table_name on test (test_name)
go


実行結果

index_name:PK__test__9B8FEA040AD2A005
index_id:1
index_column_id:1
name:test_id
----
index_name:PK__test__9B8FEA040AD2A005
index_id:1
index_column_id:2
name:test_cycle
----
index_name:uk_table_name
index_id:2
index_column_id:1
name:test_name
----


動作環境
Groovy 1.6.3, JDK6 Update14, SQL Server JDBC Driver 2.0,
SQL Server 2008 Express

参考情報
sys.index_columns
http://msdn.microsoft.com/ja-jp/library/ms175105.aspx

2009年10月2日金曜日

ScriptomとExcelで列を挿入する

ScriptomとExcelで列を挿入するには、以下のコードを実行します。

import org.codehaus.groovy.scriptom.*;
import org.codehaus.groovy.scriptom.tlb.office.excel.*;

Scriptom.inApartment
{
ea = new ActiveXObject("Excel.Application")

wb = ea.workbooks.open(new File("test1.xls").canonicalPath)

ea.DisplayAlerts = false

// 1枚目のシートのA列目に挿入
// -4161=xlShiftToRight
wb.sheets(1).Columns("A").insert(-4161)

wb.saveAs(new File("test26a.xls").canonicalPath)
wb.close
}


サンプルExcelブック(test1.xls)


実行結果
ScriptomとExcelで列を挿入した結果

動作環境
groovy 1.6.3/JDK6 Update14/Excel 2007

WSHで同様の処理を行うには、以下のスクリプトを実行します。
Set sh = CreateObject("WScript.Shell")
Set xa = CreateObject("Excel.Application")

xa.DisplayAlerts = false

Set wb = xa.workbooks.open(sh.CurrentDirectory + "\test1.xls")
' -4161=xlShiftToRight
wb.sheets(1).Columns("A").insert(-4161)
wb.saveAs(sh.CurrentDirectory + "\test26b.xls")
wb.close


関連情報

2009年10月1日木曜日

ScriptomとExcelで行を挿入する

ScriptomとExcelで行を挿入するには、以下のコードを実行します。


import org.codehaus.groovy.scriptom.*;
import org.codehaus.groovy.scriptom.tlb.office.excel.*;

Scriptom.inApartment
{
ea = new ActiveXObject("Excel.Application")

wb = ea.workbooks.open(new File("test1.xls").canonicalPath)

ea.DisplayAlerts = false

// 1枚目のシートの2行目に挿入
// -4121=xlShiftDown
wb.sheets(1).Rows("2").insert(-4121)

wb.saveAs(new File("test25a.xls").canonicalPath)
wb.close
}


サンプルExcelブック(test1.xls)


実行結果
ScriptomとExcelで行を挿入した結果

動作環境
groovy 1.6.3/JDK6 Update14/Excel 2007

WSHで同様の処理を行うには、以下のスクリプトを実行します。

Set sh = CreateObject("WScript.Shell")
Set xa = CreateObject("Excel.Application")

xa.DisplayAlerts = false

Set wb = xa.workbooks.open(sh.CurrentDirectory + "\test1.xls")
' -4121=xlShiftDown
wb.sheets(1).Rows("2").insert(-4121)
wb.saveAs(sh.CurrentDirectory + "\test25b.xls")
wb.close


関連情報