2009年9月30日水曜日

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 = "department"
query = "select\
columns.name, \
types.name as column_type,\
columns.max_length,\
columns.precision,\
columns.scale,\
columns.is_nullable \
from\
sys.tables\
join sys.columns\
on (tables.object_id = columns.object_id)\
join sys.types\
on (columns.user_type_id = types.user_type_id)\
where\
tables.name = ${table}"

sql.eachRow(query){
// カラム名
println "name:${it.name}"
// 型名
println "column_type:${it.column_type}"
// 列の最大長
println "max_length:${it.max_length}"
// 有効桁数
println "precision:${it.precision}"
// 小数点以下桁数
println "scale:${it.scale}"
// NULLが使用可能か
println "is_nullable:${it.is_nullable}"
println "----"
}


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

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

2009年9月29日火曜日

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

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


import groovy.sql.Sql

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

// 型一覧
sql.eachRow("select * from sys.types") {
// 型名
println "name:${it.name}"
// 内部システム型ID
println "system_type_id:${it.system_type_id}"
// 型のID(システム型の場合はsystem_type_idとおなじ)
println "user_type_id:${it.user_type_id}"
println "----"
}


実行結果例

name:image
system_type_id:34
user_type_id:34
----
name:text
system_type_id:35
user_type_id:35
----
name:uniqueidentifier
system_type_id:36
user_type_id:36
----

以下略


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

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

groovyとPostgreSQLとquartzの組み合わせでJobを作成する

1.quartzの設定
http://www.opensymphony.com/quartz/download.actionから
quartz-1.6.5.zipをダウンロードして、解凍。
quartz-all-1.6.5.jarをgroovyのlibディレクトリへコピー。
quartzのlib/coreのcommons-collections-3.2.jarをgroovyのlibディレクトリへコピー。quartzのlib/optionalのcommons-pool-1.3.jarをgroovyのlibディレクトリへコピー
quartzのlib/optionalのcommons-dbcp-1.2.2.jarをgroovyのlibディレクトリへコピー

postgresのJDBCドライバーもgroovyのlibディレクトリへコピーしておく。

PostgreSQLで以下のコマンドを実行してDB作成。
CREATE DATABASE quartz
WITH OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'Japanese, Japan'
LC_CTYPE = 'Japanese, Japan'
CONNECTION LIMIT = -1;

quartzのdocs/dbTables/tables_postgres.sqlを実行。

2.以下のように設定ファイルを作成。
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


2.以下のようにJobインターフェイスを実装するクラスを作成

import org.quartz.*

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


3.作成したジョブクラスをJobDetailとTriggerに関連付けて実行します。

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

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

// 次の分の0秒にスケジュール
Date runTime = TriggerUtils.getEvenMinuteDate(new Date())
JobDetail job = new JobDetail(
// ジョブ名
"job1",
// グループ名
"group1",
// ジョブクラス
HelloQuartzJob.class
)

// 指定した時間に実行するトリガー
trigger = new SimpleTrigger(
// トリガー名
"trigger1",
// グループ名
"group1",
// 実行時間
runTime
)

// ジョブをスケジュール
sched.scheduleJob(job, trigger)

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

try {
// ジョブ実行をするために2分待ち
Thread.sleep(120L * 1000L)
}
catch(Exception ex){}

// 終了
sched.shutdown(true)

2009年9月28日月曜日

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枚目のシートのセル範囲B2のセルにコメント追加
wb.sheets(1).Range("B2").addComment("コメントの\n追加")

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


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


実行結果
ScriptomとExcelでセルにコメントを追加した結果

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

関連情報
Range.AddComment Method
http://msdn.microsoft.com/en-us/library/bb209547.aspx

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

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

xa.DisplayAlerts = false

Set wb = xa.workbooks.open(sh.CurrentDirectory + "\test1.xls")
wb.sheets(1).Range("B2").addComment "コメントの" & vbCrLf & "追加"
wb.saveAs(sh.CurrentDirectory + "\test24b.xls")
wb.close


関連情報

groovyとROMEでATOM/RSSフィードのエントリを取得する

1.ROMEを使用するための作業
以下のいずれかの方法でROMEを使用します。

1.1.マニュアルでjarを使用する場合
http://wiki.java.net/bin/view/Javawsxml/Rome
からrome-1.0.jarをダウンロード、groovyのlibディレクトリへコピー。
http://www.jdom.org/からJDOM1.1.1をダウンロード、
zipを解凍してjdom.jarをgroovyのlibディレクトリへコピー。

1.2.grabを使用する場合
以下のラインをコードの先頭に挿入します。
@Grab(group='rome', module='rome', version='1.0') 



2.以下のコードを実行します。
import com.sun.syndication.feed.synd.*
import com.sun.syndication.io.*

uri = "http://groovyarekore.blogspot.com/feeds/posts/default"
SyndFeed feed = new SyndFeedInput(false).build(
  new InputStreamReader(new URL(uri).openStream(), "UTF-8")
)
println("フィードのタイトル:${feed.title}")
for( entry in feed.entries ){
  println("エントリタイトル:${entry.title}")
  println("エントリの日付:${entry.publishedDate}")
  println("Link:${entry.link}")
}


動作環境
JDK6 Update16, groovy 1.6.3, Rome 1.0, JDOM 1.1.1
JDK6 Update26, groovy 1.8.0, Rome 1.0

実行結果サンプル


フィードのタイトル:groovyあれこれ
エントリタイトル:ScriptomとExcelでセルを削除する
エントリの日付:Sun Sep 27 22:02:00 JST 2009
Link:http://groovyarekore.blogspot.com/2009/09/scriptomexcel_27.html
エントリタイトル:groovyとSQL Serverでテーブル一覧を表示する
エントリの日付:Sat Sep 26 23:52:00 JST 2009
Link:http://groovyarekore.blogspot.com/2009/09/groovysql-server_26.html

省略

2009年9月27日日曜日

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枚目のシートのセル範囲B2のセルを削除して左シフト
// -4159=xlShiftToLeft
wb.sheets(1).Range("B2").delete(-4159)

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


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


実行結果
ScriptomとExcelでセルを削除した結果

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

関連情報
Range.Delete Method
http://msdn.microsoft.com/en-us/library/bb178843.aspx

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

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

xa.DisplayAlerts = false

Set wb = xa.workbooks.open(sh.CurrentDirectory + "\test1.xls")
' -4159=xlShiftToLeft
wb.sheets(1).Range("B2").delete(-4159)
wb.saveAs(sh.CurrentDirectory + "\test23b.xls")
wb.close


関連情報

2009年9月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")

// テーブル一覧
sql.eachRow("select * from sys.tables") {
// テーブル名
println "name:${it.name}"
// タイプの説明
println "type_desc:${it.type_desc}"
// 作成日
println "create_date:${it.create_date}"
// 変更日
println "modify_date:${it.modify_date}"
println "----"
}


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

関連情報
sys.tables
http://msdn.microsoft.com/ja-jp/library/ms187406.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)
}
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年9月25日金曜日

groovyとSQL ServerでデータベースをREAD ONLY, READ/WRITE可能にする

groovyとSQL ServerでデータベースをREAD ONLYにするには、以下のコードを実行します。


import groovy.sql.Sql

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

// 指定したDBをREAD ONLYにする
sql.execute("alter database test1 set read_only")


データベースをREAD/WRITE可能にするには、以下のコードを実行します。

import groovy.sql.Sql

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

// 指定したDBをREAD/WRITE可能にする
sql.execute("alter database test1 set read_write")


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

関連情報
ALTER DATABASE
http://msdn.microsoft.com/ja-jp/library/ms174269.aspx

2009年9月24日木曜日

groovyとSQL Serverでデータベース名を変更する

groovyとSQL Serverでデータベース名を変更するには、以下のコードを実行します。


import groovy.sql.Sql

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

// 指定したDBの名前を変更する
sql.execute("alter database test1 modify name = renamedtest1")


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

関連情報
ALTER DATABASE
http://msdn.microsoft.com/ja-jp/library/ms174269.aspx

groovyでquartzのジョブを作成する

1.quartzを使用するための設定
http://www.opensymphony.com/quartz/download.actionから
quartz-1.6.5.zipをダウンロードして、解凍。
quartz-all-1.6.5.jarをgroovyのlibディレクトリへコピー。
quartzのlib/coreのcommons-collections-3.2.jarをgroovyのlibディレクトリへコピー。

2.以下のようにJobインターフェイスを実装するクラスを作成

ジョブの実装(HelloQuartzJob.groovy)

import org.quartz.*

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


3.作成したジョブクラスをJobDetailとTriggerに関連付けて実行します。

ジョブの登録と実行

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

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

// 次の分の0秒にスケジュール
Date runTime = TriggerUtils.getEvenMinuteDate(new Date())
JobDetail job = new JobDetail(
// ジョブ名
"job1",
// グループ名
"group1",
// ジョブクラス
HelloQuartzJob.class
)

// 指定した時間に実行するトリガー
trigger = new SimpleTrigger(
// トリガー名
"trigger1",
// グループ名
"group1",
// 実行時間
runTime
)

// ジョブをスケジュール
sched.scheduleJob(job, trigger)

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

try {
// ジョブ実行をするために2分待ち
Thread.sleep(120L * 1000L)
}
catch(Exception ex){}

// 終了
sched.shutdown(true)

2009年9月23日水曜日

groovyとSQL Serverでデータベースをオフライン/オンラインにする

groovyとSQL Serverでデータベースをオフラインにするには、以下のコードを実行します。


import groovy.sql.Sql

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

// 指定したDBをオフラインにする
// with no_waitで他のユーザが使用している場合は例外発生
sql.execute("alter database test1 set offline with no_wait")


強制的にユーザ接続を切断&ロールバックしてオフラインするには、以下のコードを実行します。

import groovy.sql.Sql

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

// 指定したDBをオフラインにする
// with rollback immediateでユーザ切断&ロールバック
sql.execute("alter database test1 set offline with rollback immediate")


データベースをオンラインにするには、以下のコードを実行します。

import groovy.sql.Sql

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

// 指定したDBをオンラインにする
sql.execute("alter database test1 set online")


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

関連情報
ALTER DATABASE
http://msdn.microsoft.com/ja-jp/library/ms174269.aspx

2009年9月22日火曜日

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枚目のシートのセル範囲A1:C2のセルをA4の位置にコピー
wb.sheets(1).Range("A1:C2").copy(wb.sheets(1).Range("A4"))

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


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


実行結果
ScriptomとExcelでセルをコピーした結果

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

関連情報

2009年9月21日月曜日

groovyでSQL Serverの構成オプション情報を取得する

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


import groovy.sql.Sql

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

// 構成オプション情報を取得
sql.eachRow("select name, description, " +
"cast(value_in_use as varchar) as value_in_use " +
"from sys.configurations") {
// 構成オプションの名前
println "name:${it.name}"
// 構成オプションの説明
println "description:${it.description}"
// 構成オプションの現在有効な値
println "value_in_use:${it.value_in_use}"
}


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

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

実行結果例

name:recovery interval (min)
description:Maximum recovery interval in minutes
value_in_use:0
name:allow updates
description:Allow updates to system tables
value_in_use:0
name:user connections
description:Number of user connections allowed
value_in_use:0
name:locks
description:Number of locks for all users
value_in_use:0

省略

2009年9月20日日曜日

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

// 使用領域情報を取得
sql.query("exec sp_spaceused") { rs ->
stmt = rs.getStatement()
while(true){
try
{
rset = stmt.getResultSet()
while(rset.next()){
md = rset.getMetaData();
for(ci=1;ci<=md.getColumnCount();ci++){
println(md.getColumnName(ci) + ":" + rset.getString(ci))
}
}
}
finally
{
try { rset.close() } catch(Exception sqlex){}
}
if( stmt.getMoreResults() == false )break;
}
}


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

関連情報
sp_spaceused
http://msdn.microsoft.com/ja-jp/library/ms188776.aspx

実行結果例

database_name:test1
database_size:4.00 MB
unallocated space:1.79 MB
reserved:1240 KB
data:488 KB
index_size:648 KB
unused:104 KB

2009年9月19日土曜日

groovyでSQL Serverに関する統計情報を取得する

groovyでSQL Serverに関する統計情報を取得するには、以下のコードを実行します。


import groovy.sql.Sql

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

// SQL Serverに関する統計情報を取得
sql.query("exec sp_monitor") { rs ->
stmt = rs.getStatement()
while(true){
try
{
rset = stmt.getResultSet()
while(rset.next()){
md = rset.getMetaData();
for(ci=1;ci<=md.getColumnCount();ci++){
println(md.getColumnName(ci) + ":" + rset.getString(ci))
}
}
}
finally
{
try { rset.close() } catch(Exception sqlex){}
}
if( stmt.getMoreResults() == false )break;
}
}


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

関連情報
sp_monitor
http://msdn.microsoft.com/ja-jp/library/ms188912.aspx

実行結果例

last_run:2009-08-19 23:56:59.003
current_run:2009-08-19 23:57:24.437
seconds:25
cpu_busy:7(0)-0%
io_busy:4(0)-0%
idle:1119(24)-96%
packets_received:307(6)
packets_sent:585(6)
packet_errors:0(0)
total_read:3142(0)
total_write:127(1)
total_errors:0(0)
connections:80(1)

2009年9月18日金曜日

groovyとSQL Serverでプリンシパルを一覧表示する

groovyとSQL Serverでプリンシパルを一覧表示するには、以下のコードを実行します。


import groovy.sql.Sql

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

sql.eachRow("select * from sys.server_principals") {
// principalの名前
println "name:${it.name}"
// principalのID
println "principal_id:${it.principal_id}"
// タイプの説明
println "type_desc:${it.type_desc}"
// デフォルトデータベース名
println "default_database_name:${it.default_database_name}"
println "----"
}


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

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

2009年9月17日木曜日

groovyとSQL Serverでデータファイル一覧を表示する

groovyとSQL Serverでデータファイル一覧を表示するには、以下のコードを実行します。


import groovy.sql.Sql

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

sql.eachRow("select * from sys.database_files") {
// ファイルID
println "file_id:${it.file_id}"
// タイプの説明
println "type_desc:${it.type_desc}"
// ファイルの論理名
println "name:${it.name}"
// ファイルの物理名
println "physical_name:${it.physical_name}"
// ファイルのサイズ
println "size:${it.size*8}(KB)"
println "----"
}


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

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

2009年9月16日水曜日

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枚目のシートのセル範囲1行目の高さを40ポイントに設定
wb.sheets(1).Rows("1").RowHeight = 40

// 1枚目のシートのセル範囲A1のセルを上寄せ
wb.sheets(1).Range("A1").VerticalAlignment = Constants.xlTop

wb.saveAs(new File("test21a.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")
wb.sheets(1).Rows("1").RowHeight = 40
const xlTop = -4160
wb.sheets(1).Range("A1").VerticalAlignment = xlTop
wb.saveAs(sh.CurrentDirectory + "\test21b.xls")
wb.close


関連情報

2009年9月15日火曜日

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枚目のシートのセル範囲A1のセルを右寄せ
wb.sheets(1).Range("A1").HorizontalAlignment = Constants.xlRight

wb.saveAs(new File("test20a.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")
const xlRight = -4152
wb.sheets(1).Range("A1").HorizontalAlignment = xlRight
wb.saveAs(sh.CurrentDirectory + "\test20b.xls")
wb.close


関連情報

  • ScriptomとExcelのまとめ

  • Range.HorizontalAlignment Property
    http://msdn.microsoft.com/en-us/library/bb213535.aspx

  • Excel定数
    http://groovy.codehaus.org/modules/scriptom/1.6.0/scriptom-office-2K3-tlb/apidocs/org/codehaus/groovy/scriptom/tlb/office/excel/Constants.html

2009年9月14日月曜日

groovyとSQL Serverでデータベース一覧を表示する

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


import groovy.sql.Sql

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

sql.eachRow("select * from sys.databases") {
// データベース名
println "name:${it.name}"
// データベースID
println "database_id:${it.database_id}"
// 作成日
println "create_date:${it.create_date}"
// データベース状態の説明
println "state_desc:${it.state_desc}"
println "----"
}


実行結果

name:master
database_id:1
create_date:2003-04-08 09:13:36.39
state_desc:ONLINE
----
name:tempdb
database_id:2
create_date:2009-08-09 23:39:24.29
state_desc:ONLINE
----
name:model
database_id:3
create_date:2003-04-08 09:13:36.39
state_desc:ONLINE
----
name:msdb
database_id:4
create_date:2008-07-09 16:46:27.767
state_desc:ONLINE
----
name:test1
database_id:5
create_date:2009-08-09 23:10:04.197
state_desc:ONLINE
----


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

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

WSHでODBCによる同様の処理を行うには、以下のコードを実行します。

cs = "Driver={SQL Server};Server=SQLSRV\SQLEXPRESS;Uid=sa;Pwd=sa;Database=master"
set conn = CreateObject("ADODB.Connection")
on error resume next
conn.open cs
if err.number <> 0 then
WScript.StdOut.WriteLine err.description
WScript.Quit
end if
set rs = conn.execute("select * from sys.databases")
if err.number <> 0 then
WScript.StdOut.WriteLine err.description
conn.close
WScript.Quit
end if
Do While Not rs.EOF
' データベース名
WScript.StdOut.WriteLine rs.Fields("name").value
rs.Movenext
Loop
conn.close
on error goto 0

2009年9月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.open(new File("test1.xls").canonicalPath)

ea.DisplayAlerts = false

// 1枚目のシートのセル範囲B1:C1のセルを結合
wb.sheets(1).Range("B1:C1").MergeCells = true

wb.saveAs(new File("test19a.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")
wb.sheets(1).Range("B1:C1").MergeCells = true
wb.saveAs(sh.CurrentDirectory + "\test19b.xls")
wb.close


関連情報

2009年9月12日土曜日

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枚目のシートのセル範囲A3の文字列を設定
wb.sheets(1).Range("A3").value = "groovyあれこれ"
// 1枚目のシートのセル範囲A3に折り返して全体を表示するように設定
wb.sheets(1).Range("A3").WrapText = true
// 1枚目のシートのセル範囲3行目の高さを自動調整
wb.sheets(1).Rows("3").AutoFit()

wb.saveAs(new File("test18a.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")
wb.sheets(1).Range("A3").value = "groovyあれこれ"
wb.sheets(1).Range("A3").WrapText = true
wb.sheets(1).Rows("3").AutoFit
wb.saveAs(sh.CurrentDirectory + "\test18b.xls")
wb.close


関連情報

2009年9月11日金曜日

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枚目のシートのセル範囲A3の文字列を設定
wb.sheets(1).Range("A3").value = "groovyあれこれ"
// 1枚目のシートのセル範囲A列の幅を自動調整
wb.sheets(1).Columns("A").AutoFit()

wb.saveAs(new File("test17a.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")
wb.sheets(1).Range("A3").value = "groovyあれこれ"
wb.sheets(1).Columns("A").AutoFit
wb.saveAs(sh.CurrentDirectory + "\test17b.xls")
wb.close


関連情報

2009年9月10日木曜日

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枚目のシートのセル範囲D列の幅を40文字に設定
wb.sheets(1).Columns("D").ColumnWidth = 40

wb.saveAs(new File("test16a.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")
wb.sheets(1).Columns("D").ColumnWidth = 40
wb.saveAs(sh.CurrentDirectory + "\test16b.xls")
wb.close


関連情報

2009年9月9日水曜日

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枚目のシートのセル範囲3行目の高さを40ポイントに設定
wb.sheets(1).Rows("3").RowHeight = 40

wb.saveAs(new File("test15a.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")
wb.sheets(1).Rows("3").RowHeight = 40
wb.saveAs(sh.CurrentDirectory + "\test15b.xls")
wb.close


関連情報

2009年9月8日火曜日

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枚目のシートのセル範囲D列の背景色を設定(BGR)
wb.sheets(1).Columns("D").interior.color = 0xff9977

wb.saveAs(new File("test14a.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")
wb.sheets(1).Columns("D").interior.color = RGB(119, 153, 255)
wb.saveAs(sh.CurrentDirectory + "\test14b.xls")
wb.close


関連情報

2009年9月7日月曜日

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枚目のシートのセル範囲3行目の背景色を設定(BGR)
wb.sheets(1).Rows("3").interior.color = 0xc0c0c0

wb.saveAs(new File("test13a.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")
wb.sheets(1).Rows("3").interior.color = RGB(192,192,192)
wb.saveAs(sh.CurrentDirectory + "\test13b.xls")
wb.close


関連情報

2009年9月6日日曜日

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枚目のシートのセル範囲A1の値を設定
wb.sheets(1).Range("A3").Value = 321
// 1枚目のシートのセル範囲A1の表示形式のユーザ定義を設定
wb.sheets(1).Range("A3").NumberFormatLocal = "0000"

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


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


実行結果
ScriptomとExcelでユーザ定義書式を設定したセル

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

関連情報
Range.NumberFormatLocal Property
http://msdn.microsoft.com/en-us/library/bb213679.aspx

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

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

xa.DisplayAlerts = false

Set wb = xa.workbooks.open(sh.CurrentDirectory + "\test1.xls")
wb.sheets(1).Range("A3").value = 321
wb.sheets(1).Range("A3").NumberFormatLocal = "0000"
wb.saveAs(sh.CurrentDirectory + "\test12b.xls")
wb.close


関連情報

2009年9月5日土曜日

ScriptomとWMIで現在のプロセス数を調べる

ScriptomとWMIで現在のプロセス数を調べるには、以下のコードを実行します。

import org.codehaus.groovy.scriptom.*;

Scriptom.inApartment
{
locator = new ActiveXObject("WbemScripting.SWbemLocator")
service = locator.ConnectServer()
oss = service.ExecQuery(
"select * from Win32_OperatingSystem")

for(os in oss){
// 現在のプロセス数を取得
println(os.NumberOfProcesses)
}
}


動作環境
JDK6 Update14, groovy1.6.3

関連項目
Win32_OperatingSystem Class
http://msdn.microsoft.com/en-us/library/aa394239%28VS.85%29.aspx

2009年9月4日金曜日

ScriptomとWMIで空き物理メモリと空き仮想メモリを調べる

ScriptomとWMIで空き物理メモリと空き仮想メモリを調べるには、以下のコードを実行します。

import org.codehaus.groovy.scriptom.*;

Scriptom.inApartment
{
locator = new ActiveXObject("WbemScripting.SWbemLocator")
service = locator.ConnectServer()
oss = service.ExecQuery(
"select * from Win32_OperatingSystem")

for(os in oss){
// 空き物理メモリと空き仮想メモリをKByteで表示
println(os.freePhysicalMemory + ":" + os.freeVirtualMemory )
}
}


動作環境
JDK6 Update14, groovy1.6.3

関連情報
http://msdn.microsoft.com/en-us/library/aa394239%28VS.85%29.aspx

2009年9月3日木曜日

ScriptomとWMIでOSのキャプションとコンピュータの説明を取得する

ScriptomとWMIでOSのキャプションとコンピュータの説明を取得するには、以下のコードを実行します。

import org.codehaus.groovy.scriptom.*;

Scriptom.inApartment
{
locator = new ActiveXObject("WbemScripting.SWbemLocator")
service = locator.ConnectServer()
oss = service.ExecQuery(
"select * from Win32_OperatingSystem")

for(os in oss){
// OSのキャプションとコンピュータの説明を取得
println(os.caption + ":" + os.description )
}
}


動作環境
JDK6 Update14, groovy1.6.3

関連情報
http://msdn.microsoft.com/en-us/library/aa394239%28VS.85%29.aspx

2009年9月2日水曜日

ScriptomとWMIでネットワークアダプタ構成名とホスト名を取得する

ScriptomとWMIでネットワークアダプタ構成名とホスト名を取得するには、以下のコードを実行します。

import org.codehaus.groovy.scriptom.*;

Scriptom.inApartment
{
locator = new ActiveXObject("WbemScripting.SWbemLocator")
service = locator.ConnectServer()
nas = service.ExecQuery(
"select * from Win32_NetworkAdapterConfiguration")

for(na in nas){
// ネットワークアダプタ構成名とホスト名を取得
println(na.caption + ":" + na.DNSHostName)
}
}


動作環境
JDK6 Update14, groovy1.6.3

関連情報
http://msdn.microsoft.com/en-us/library/aa394217%28VS.85%29.aspx

2009年9月1日火曜日

ScriptomとWMIでネットワークアダプタ構成名とDHCPサーバのIPアドレスを調べる

ScriptomとWMIでネットワークアダプタ構成名とDHCPサーバのIPアドレスを調べるには、以下のコードを実行します。


import org.codehaus.groovy.scriptom.*;

Scriptom.inApartment
{
locator = new ActiveXObject("WbemScripting.SWbemLocator")
service = locator.ConnectServer()
nas = service.ExecQuery(
"select * from Win32_NetworkAdapterConfiguration")

for(na in nas){
// ネットワークアダプタ構成名とDHCPサーバのIPアドレスを取得
println(na.caption + ":" + na.DHCPServer)
}
}


動作環境
JDK6 Update14, groovy1.6.3

関連情報
http://msdn.microsoft.com/en-us/library/aa394217%28VS.85%29.aspx