対応するデータベースを追加する

最終更新日: 2022年5月31日

設定ファイルdatabase.txt

開発者は repository/trunk フォルダに database.txt というファイルを用意してください。これはリポジトリに含まれるため、このプロジェクトのために利用できるデータベースという位置付けになります。

database.txtの記述例を示します。ここでは仮のデータベースとして Oracle 99z という製品を追加した、とします。

# oracle 99z
oracle99z.database_label=Oracle 99z
oracle99z.database_type=oracle99z
oracle99z.driver=oracle.jdbc.driver.OracleDriver
oracle99z.url=jdbc:oracle:thin:@localhost:1521:wagbydb
oracle99z.quoteid=\"
oracle99z.quotewhere=
oracle99z.quoteidinwhere=\"
oracle99z.quoteidforhibernate=\"
oracle99z.hibernateDialect=org.hibernate.dialect.Oracle99zDialect
oracle99z.maxTablenameLength=30
oracle99z.maxIndexnameLength=30
oracle99z.maxColumnnameLength=30
oracle99z.maxLengthStringDataType=VARCHAR2(4000)
oracle99z.characterLargeObjectDataType=NCLOB
oracle99z.supportTimeDataType=false
oracle99z.searchStringEscapeInLike=\\\\
oracle99z.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NOCACHE CYCLE 
oracle99z.sequenceDML=SELECT $QUOTEID$SEQNAME$QUOTEID.NEXTVAL FROM dual
oracle99z.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
oracle99z.springBatchDDL=batch_oracle.ddl
oracle99z.masterDDL=master_oracle.ddl
oracle99z.validationQuery=SELECT 1 FROM dual

各エントリは「データベースを識別するID.設定キー=値」となっています。データベースを識別するIDは、重複しない英数字であれば任意です。ここから設定キーについて説明します。

設定キー説明必須
database_label Designerのデータベース選択肢に表示される文字列になります。 Oracle 99z
database_type データベースを識別するIDです。既存の設定と重複しない英数字です。空白を含めることはできません。この識別IDを、各エントリの接頭語として付与してください。 oracle99z
driver データベースベンダーが提供するJDBCドライバのクラス名です。Javaパッケージ名も含めて記述します。大文字小文字も区別します。JDBCは4以上の規格である必要があります。 oracle.jdbc.driver.OracleDriver
url Designerの接続URLの初期値として用いられます。 jdbc:oracle:thin:@localhost:1521:wagbydb
quoteid Quote ID は、データベースへ発行するSQLのテーブル名や列名の前後に付与される文字です。利用するデータベースによって異なるため、データベースの仕様に沿って指定します。空白にすると Quote ID を使いません。Quote ID で囲むことによって、利用できるテーブル名や列名の名前の自由度を高めることができます。例えば、あるデータベースでは列名にハイフンを使うと SQL がエラーになりますが、Quote ID で囲むことによってハイフンを利用できるようになる、というような場合があります。詳細はデータベース設定に関する識別子の区切り文字をお読みください。 - \"
quotewhere Quote ID と同じ考え方ですが、WHERE 句全体に適用されるものです。 -
quoteidinwhere Quote ID と同じ考え方ですが、WHERE 句の内部の列に適用されるものです。通常は quoteid と同じです。 - \"
quoteidforhibernate Quote ID と同じ考え方ですが、Hibernate が利用するものです。通常は quoteid と同じです。 - \"
hibernateDialect Hibernate の方言 (Dialect) クラスを指定します。Wagby R9 は Hibernate 5.1 を使っています。5.1 に対応した Dialect クラスを指定してください。Hibernate 5.1 自体に含まれていない場合でも、データベースベンダが独自に提供することがあります。詳細は利用されるデータベースベンダにお問い合わせください。ここで指定したクラスファイルを含む jar ファイル (.jar) は、customize/tomcat/lib フォルダに格納しておきます。 org.hibernate.dialect.Oracle99zDialect
maxTablenameLength 利用するデータベースが許容する最大のテーブル名の長さを指定します。Wagbyは、この長さを超えないように調整したテーブル名を用意して、CREATE DDL 文を生成します。 30
maxIndexnameLength 利用するデータベースが許容する最大のインデック名の長さを指定します。Wagbyは、この長さを超えないように調整したインデックス名を用意して、CREATE DDL 文を生成します。 30
maxColumnnameLength 利用するデータベースが許容する最大のカラム名(列名)の長さを指定します。Wagbyは、この長さを超えないように調整したカラム名を用意して、CREATE DDL 文を生成します。 30
maxLengthStringDataType 利用するデータベースが許容する文字列型の最大長を指定します。 VARCHAR2(4000)
characterLargeObjectDataType 利用するデータベースが提供する Character Large Object (CLOB) の型を指定します。 - NCLOB
supportTimeDataType 利用するデータベースが時刻型をサポートするかどうかを指定します。 - false
searchStringEscapeInLike SQLのWHERE句でLIKE演算子を使ったときのエスケープシーケンス文字を指定します。 \\\\
createSequenceDDL 利用するデータベースが順序型を提供するとき、順序を定義するための文法を指定します。[後述] -
sequenceDML 利用するデータベースが順序型を提供するとき、順序を利用するための文法を指定します。[後述] -
dropIndexDDL 利用するデータベースがインデックスを削除するときの文法を指定します。[後述]
springBatchDDL Wagby R9 は Spring Batch 3 を同梱しています。Spring Batch 3 のための管理テーブルを作成するための DDL を指定します。注意:Spring Batch 3 がサポートするデータベースである必要があります。そうでない場合、ここは空白としてください。 -
masterDDL Wagby が提供する「選択肢モデル」の規定テーブルを生成するための DDL ファイルを指定します。ここに指定した DDL ファイルを wagbydesigner/bin/webpage/WEB-INF/export/conf/createddl フォルダに保存してください。[後述]
validationQuery データベースの自動再接続を有効にしたとき、データベースに問い合わせる接続確認のためのSQLとして利用されます。 - SELECT 1 FROM dual

createSequenceDDLの詳細

createSequenceDDL は順序を利用できるデータベースに指定します。次の特殊文字を組み合わせて、利用するデータベースの DDL を用意します。

$QUOTEID
Quote ID を意味します。
$SEQNAME
順序名を意味します。
$MINVALUE
順序の最小値を意味します。型が整数型の場合、Integer.MIN_VALUE となります。
$MAXVALUE
順序の最大値を意味します。型が整数型の場合、Integer.MAX_VALUE となります。
$START
順序の開始数字を意味します。

例えば次のような DDL を指定することができます。

CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NOCACHE CYCLE

sequenceDMLの詳細

sequenceDML は上の特殊文字を使って、利用するデータベースが順序を発行するときの DML になります。例えば次のようになります。

SELECT $QUOTEID$SEQNAME$QUOTEID.NEXTVAL FROM dual

dropIndexDDLの詳細

dropIndexDDL はインデックスを削除する DDL を指定します。次の特殊文字を利用できます。

$QUOTEID
Quote ID を意味します。
$INDEXNAME
インデックス名を意味します。

masterDDLの詳細

masterDDL に指定した ddl ファイルは、選択肢モデルの作成時に用いられます。4つの項目 id,priority,valid,content を定義する必要があります。${tablename} はテーブル名に置換されます。例えばデータベースに Oracle を利用する場合は、次のようになります。

CREATE TABLE "${tablename}" (
"id" NUMBER PRIMARY KEY,
"priority" NUMBER,
"valid" VARCHAR2(4000),
"content" VARCHAR2(4000) NOT NULL
)

お使いのデータベースの型にあわせて、上記を修正した ddl ファイルを用意します。これをwagbydesigner/bin/webpage/WEB-INF/export/conf/createddl フォルダに保存してください。

同梱されている設定

標準で同梱されている設定は次の通りです。

注意

ご注意ください。以下の設定にはデータベースベンダがサポートを終了した製品も含まれています。サポート終了となったデータベースは利用しないでください。また MySQL, PostgreSQL, Oracle, SQL Server 以外のデータベースを利用した場合のサポートはプレミアムサポートで承ります。

HSQLDB

hsqldb.database_label=HSQLDB
hsqldb.database_type=hsqldb
hsqldb.driver=org.hsqldb.jdbcDriver
hsqldb.url=
hsqldb.quoteid=\"
hsqldb.quotewhere=
hsqldb.quoteidinwhere=\"
hsqldb.quoteidforhibernate=\"
hsqldb.hibernateDialect=org.hibernate.dialect.HSQLDialect
hsqldb.maxTablenameLength=65535
hsqldb.maxIndexnameLength=65535
hsqldb.maxColumnnameLength=65535
hsqldb.maxLengthStringDataType=VARCHAR(4000)
hsqldb.characterLargeObjectDataType=CLOB
hsqldb.supportTimeDataType=true
hsqldb.searchStringEscapeInLike=\\\\
hsqldb.springBatchDDL=batch_hsqldb.ddl
hsqldb.masterDDL=master_sql92.ddl

PostgreSQL 8.1

postgresql81.database_label=PostgreSQL 8.1
postgresql81.database_type=postgresql81
postgresql81.driver=org.postgresql.Driver
postgresql81.url=jdbc:postgresql://localhost/wagbydb
postgresql81.quoteid=\"
postgresql81.quotewhere=
postgresql81.quoteidinwhere=\"
postgresql81.quoteidforhibernate=\"
postgresql81.hibernateDialect=org.hibernate.dialect.PostgreSQL81Dialect
postgresql81.maxTablenameLength=63
postgresql81.maxIndexnameLength=63
postgresql81.maxColumnnameLength=63
postgresql81.maxLengthStringDataType=TEXT
postgresql81.characterLargeObjectDataType=TEXT
postgresql81.supportTimeDataType=true
postgresql81.searchStringEscapeInLike=\\\\\\\\
postgresql81.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART $START CACHE 1 CYCLE
postgresql81.sequenceDML=select nextval('$QUOTEID$SEQNAME$QUOTEID')
postgresql81.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
postgresql81.springBatchDDL=batch_postgresql.ddl
postgresql81.masterDDL=master_postgresql.ddl
postgresql81.validationQuery=SELECT 1

PostgreSQL 8.2 and later

postgresql82.database_label=PostgreSQL 8.2 and later
postgresql82.database_type=postgresql82
postgresql82.driver=org.postgresql.Driver
postgresql82.url=jdbc:postgresql://localhost/wagbydb
postgresql82.quoteid=\"
postgresql82.quotewhere=
postgresql82.quoteidinwhere=\"
postgresql82.quoteidforhibernate=\"
postgresql82.hibernateDialect=org.hibernate.dialect.PostgreSQL82Dialect
postgresql82.maxTablenameLength=63
postgresql82.maxIndexnameLength=63
postgresql82.maxColumnnameLength=63
postgresql82.maxLengthStringDataType=TEXT
postgresql82.characterLargeObjectDataType=TEXT
postgresql82.supportTimeDataType=true
postgresql82.searchStringEscapeInLike=\\\\\\\\
postgresql82.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART $START CACHE 1 CYCLE
postgresql82.sequenceDML=select nextval('$QUOTEID$SEQNAME$QUOTEID')
postgresql82.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
postgresql82.springBatchDDL=batch_postgresql.ddl
postgresql82.masterDDL=master_postgresql.ddl
postgresql82.validationQuery=SELECT 1

PostgreSQL 9 and later

postgresql9.database_label=PostgreSQL 9 and later
postgresql9.database_type=postgresql9
postgresql9.driver=org.postgresql.Driver
postgresql9.url=jdbc:postgresql://localhost/wagbydb
postgresql9.quoteid=\"
postgresql9.quotewhere=
postgresql9.quoteidinwhere=\"
postgresql9.quoteidforhibernate=\"
postgresql9.hibernateDialect=org.hibernate.dialect.PostgreSQL9Dialect
postgresql9.maxTablenameLength=63
postgresql9.maxIndexnameLength=63
postgresql9.maxColumnnameLength=63
postgresql9.maxLengthStringDataType=TEXT
postgresql9.characterLargeObjectDataType=TEXT
postgresql9.supportTimeDataType=true
postgresql9.searchStringEscapeInLike=\\\\\\\\
postgresql9.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART $START CACHE 1 CYCLE
postgresql9.sequenceDML=select nextval('$QUOTEID$SEQNAME$QUOTEID')
postgresql9.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
postgresql9.springBatchDDL=batch_postgresql.ddl
postgresql9.masterDDL=master_postgresql.ddl
postgresql9.validationQuery=SELECT 1

PostgreSQL 9.2 and later

postgresql92.database_label=PostgreSQL 9.2 and later
postgresql92.database_type=postgresql92
postgresql92.driver=org.postgresql.Driver
postgresql92.url=jdbc:postgresql://localhost/wagbydb
postgresql92.quoteid=\"
postgresql92.quotewhere=
postgresql92.quoteidinwhere=\"
postgresql92.quoteidforhibernate=\"
postgresql92.hibernateDialect=org.hibernate.dialect.PostgreSQL92Dialect
postgresql92.maxTablenameLength=63
postgresql92.maxIndexnameLength=63
postgresql92.maxColumnnameLength=63
postgresql92.maxLengthStringDataType=TEXT
postgresql92.characterLargeObjectDataType=TEXT
postgresql92.supportTimeDataType=true
postgresql92.searchStringEscapeInLike=\\\\\\\\
postgresql92.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART $START CACHE 1 CYCLE
postgresql92.sequenceDML=select nextval('$QUOTEID$SEQNAME$QUOTEID')
postgresql92.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
postgresql92.springBatchDDL=batch_postgresql.ddl
postgresql92.masterDDL=master_postgresql.ddl
postgresql92.validationQuery=SELECT 1

PostgreSQL 9.4 and later

postgresql94.database_label=PostgreSQL 9.4 and later
postgresql94.database_type=postgresql94
postgresql94.driver=org.postgresql.Driver
postgresql94.url=jdbc:postgresql://localhost/wagbydb
postgresql94.quoteid=\"
postgresql94.quotewhere=
postgresql94.quoteidinwhere=\"
postgresql94.quoteidforhibernate=\"
postgresql94.hibernateDialect=org.hibernate.dialect.PostgreSQL94Dialect
postgresql94.maxTablenameLength=63
postgresql94.maxIndexnameLength=63
postgresql94.maxColumnnameLength=63
postgresql94.maxLengthStringDataType=TEXT
postgresql94.characterLargeObjectDataType=TEXT
postgresql94.supportTimeDataType=true
postgresql94.searchStringEscapeInLike=\\\\\\\\
postgresql94.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART $START CACHE 1 CYCLE
postgresql94.sequenceDML=select nextval('$QUOTEID$SEQNAME$QUOTEID')
postgresql94.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
postgresql94.springBatchDDL=batch_postgresql.ddl
postgresql94.masterDDL=master_postgresql.ddl
postgresql94.validationQuery=SELECT 1

Oracle 9i

oracle9i.database_label=Oracle 9i
oracle9i.database_type=oracle9i
oracle9i.driver=oracle.jdbc.driver.OracleDriver
oracle9i.url=jdbc:oracle:thin:@localhost:1521:wagbydb
oracle9i.quoteid=\"
oracle9i.quotewhere=
oracle9i.quoteidinwhere=\"
oracle9i.quoteidforhibernate=\"
oracle9i.hibernateDialect=org.hibernate.dialect.Oracle9iDialect
oracle9i.maxTablenameLength=30
oracle9i.maxIndexnameLength=30
oracle9i.maxColumnnameLength=30
oracle9i.maxLengthStringDataType=VARCHAR2(4000)
oracle9i.characterLargeObjectDataType=NCLOB
oracle9i.supportTimeDataType=false
oracle9i.searchStringEscapeInLike=\\\\
oracle9i.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NOCACHE CYCLE 
oracle9i.sequenceDML=SELECT $QUOTEID$SEQNAME$QUOTEID.NEXTVAL FROM dual
oracle9i.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
oracle9i.springBatchDDL=batch_oracle.ddl
oracle9i.masterDDL=master_oracle.ddl
oracle9i.validationQuery=SELECT 1 FROM dual

Oracle 10g/11g

oracle10g.database_label=Oracle 10g/11g
oracle10g.database_type=oracle10g
oracle10g.driver=oracle.jdbc.driver.OracleDriver
oracle10g.url=jdbc:oracle:thin:@localhost:1521:wagbydb
oracle10g.quoteid=\"
oracle10g.quotewhere=
oracle10g.quoteidinwhere=\"
oracle10g.quoteidforhibernate=\"
oracle10g.hibernateDialect=org.hibernate.dialect.Oracle10gDialect
oracle10g.maxTablenameLength=30
oracle10g.maxIndexnameLength=30
oracle10g.maxColumnnameLength=30
oracle10g.maxLengthStringDataType=VARCHAR2(4000)
oracle10g.characterLargeObjectDataType=NCLOB
oracle10g.supportTimeDataType=false
oracle10g.searchStringEscapeInLike=\\\\
oracle10g.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NOCACHE CYCLE 
oracle10g.sequenceDML=SELECT $QUOTEID$SEQNAME$QUOTEID.NEXTVAL FROM dual
oracle10g.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
oracle10g.springBatchDDL=batch_oracle.ddl
oracle10g.masterDDL=master_oracle.ddl
oracle10g.validationQuery=SELECT 1 FROM dual

Oracle 12c

oracle12c.database_label=Oracle 12c
oracle12c.database_type=oracle12c
oracle12c.driver=oracle.jdbc.driver.OracleDriver
oracle12c.url=jdbc:oracle:thin:@localhost:1521:wagbydb
oracle12c.quoteid=\"
oracle12c.quotewhere=
oracle12c.quoteidinwhere=\"
oracle12c.quoteidforhibernate=\"
oracle12c.hibernateDialect=org.hibernate.dialect.Oracle12cDialect
oracle12c.maxTablenameLength=30
oracle12c.maxIndexnameLength=30
oracle12c.maxColumnnameLength=30
oracle12c.maxLengthStringDataType=VARCHAR2(4000)
oracle12c.characterLargeObjectDataType=NCLOB
oracle12c.supportTimeDataType=false
oracle12c.searchStringEscapeInLike=\\\\
oracle12c.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NOCACHE CYCLE 
oracle12c.sequenceDML=SELECT $QUOTEID$SEQNAME$QUOTEID.NEXTVAL FROM dual
oracle12c.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
oracle12c.springBatchDDL=batch_oracle.ddl
oracle12c.masterDDL=master_oracle.ddl
oracle12c.validationQuery=SELECT 1 FROM dual

MySQL

mysql.database_label=MySQL
mysql.database_type=mysql
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost/wagbydb?useUnicode=true&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull
mysql.quoteid=`
mysql.quotewhere=
mysql.quoteidinwhere=`
mysql.quoteidforhibernate=`
mysql.hibernateDialect=org.hibernate.dialect.MySQLDialect
mysql.maxTablenameLength=64
mysql.maxIndexnameLength=64
mysql.maxColumnnameLength=64
mysql.maxLengthStringDataType=TEXT
mysql.characterLargeObjectDataType=TEXT
mysql.supportTimeDataType=true
mysql.searchStringEscapeInLike=\\\\\\\\
mysql.springBatchDDL=batch_mysql.ddl
mysql.masterDDL=master_mysql.ddl
mysql.validationQuery=SELECT 1

MySQL 6

mysql6.database_label=MySQL 6
mysql6.database_type=mysql6
mysql6.driver=com.mysql.jdbc.Driver
mysql6.url=jdbc:mysql://localhost/wagbydb?useUnicode=true&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull
mysql6.quoteid=`
mysql6.quotewhere=
mysql6.quoteidinwhere=`
mysql6.quoteidforhibernate=`
mysql6.version=6
mysql6.hibernateDialect=org.hibernate.dialect.MySQLDialect
mysql6.maxTablenameLength=64
mysql6.maxIndexnameLength=64
mysql6.maxColumnnameLength=64
mysql6.maxLengthStringDataType=TEXT
mysql6.characterLargeObjectDataType=TEXT
mysql6.supportTimeDataType=true
mysql6.searchStringEscapeInLike=\\\\\\\\
mysql6.springBatchDDL=batch_mysql6.ddl
mysql6.masterDDL=master_mysql.ddl
mysql6.validationQuery=SELECT 1

SQLServer 2000

sqlserver2000.database_label=SQLServer 2000
sqlserver2000.database_type=sqlserver2000
sqlserver2000.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver2000.url=jdbc:sqlserver://localhost;databasename=wagbydb
sqlserver2000.quoteid=\"
sqlserver2000.quotewhere=
sqlserver2000.quoteidinwhere=\"
sqlserver2000.quoteidforhibernate=\"
sqlserver2000.hibernateDialect=jp.jasminesoft.jfc.hibernate.dialect.SQLServerDialect
sqlserver2000.maxTablenameLength=128
sqlserver2000.maxIndexnameLength=128
sqlserver2000.maxColumnnameLength=128
sqlserver2000.maxLengthStringDataType=nvarchar(1000)
sqlserver2000.characterLargeObjectDataType=NVARCHAR(MAX)
sqlserver2000.supportTimeDataType=false
sqlserver2000.searchStringEscapeInLike=\\\\
sqlserver2000.springBatchDDL=batch_sqlserver.ddl
sqlserver2000.masterDDL=master_sqlserver2000.ddl
sqlserver2000.validationQuery=SELECT 1

SQLServer 2005

sqlserver2005.database_label=SQLServer 2005
sqlserver2005.database_type=sqlserver2005
sqlserver2005.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver2005.url=jdbc:sqlserver://localhost;databasename=wagbydb
sqlserver2005.quoteid=\"
sqlserver2005.quotewhere=
sqlserver2005.quoteidinwhere=\"
sqlserver2005.quoteidforhibernate=\"
sqlserver2005.hibernateDialect=jp.jasminesoft.jfc.hibernate.dialect.SQLServer2005Dialect
sqlserver2005.maxTablenameLength=128
sqlserver2005.maxIndexnameLength=128
sqlserver2005.maxColumnnameLength=128
sqlserver2005.maxLengthStringDataType=nvarchar(1000)
sqlserver2005.characterLargeObjectDataType=NVARCHAR(MAX)
sqlserver2005.supportTimeDataType=false
sqlserver2005.searchStringEscapeInLike=\\\\
sqlserver2005.springBatchDDL=batch_sqlserver.ddl
sqlserver2005.masterDDL=master_sqlserver2000.ddl
sqlserver2005.validationQuery=SELECT 1

SQLServer 2008

sqlserver2008.database_label=SQLServer 2008
sqlserver2008.database_type=sqlserver2008
sqlserver2008.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver2008.url=jdbc:sqlserver://localhost;databasename=wagbydb
sqlserver2008.quoteid=\"
sqlserver2008.quotewhere=
sqlserver2008.quoteidinwhere=\"
sqlserver2008.quoteidforhibernate=\"
sqlserver2008.hibernateDialect=jp.jasminesoft.jfc.hibernate.dialect.SQLServer2008Dialect
sqlserver2008.maxTablenameLength=128
sqlserver2008.maxIndexnameLength=128
sqlserver2008.maxColumnnameLength=128
sqlserver2008.maxLengthStringDataType=nvarchar(1000)
sqlserver2008.characterLargeObjectDataType=NVARCHAR(MAX)
sqlserver2008.supportTimeDataType=false
sqlserver2008.searchStringEscapeInLike=\\\\
sqlserver2008.springBatchDDL=batch_sqlserver.ddl
sqlserver2008.masterDDL=master_sqlserver2000.ddl
sqlserver2008.validationQuery=SELECT 1

SQLServer 2012/2014/2016

sqlserver2012.database_label=SQLServer 2012/2014/2016
sqlserver2012.database_type=sqlserver2012
sqlserver2012.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserver2012.url=jdbc:sqlserver://localhost;databasename=wagbydb
sqlserver2012.quoteid=\"
sqlserver2012.quotewhere=
sqlserver2012.quoteidinwhere=\"
sqlserver2012.quoteidforhibernate=\"
sqlserver2012.hibernateDialect=jp.jasminesoft.jfc.hibernate.dialect.SQLServer2012Dialect
sqlserver2012.maxTablenameLength=128
sqlserver2012.maxIndexnameLength=128
sqlserver2012.maxColumnnameLength=128
sqlserver2012.maxLengthStringDataType=nvarchar(1000)
sqlserver2012.characterLargeObjectDataType=NVARCHAR(MAX)
sqlserver2012.supportTimeDataType=false
sqlserver2012.searchStringEscapeInLike=\\\\
sqlserver2012.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NO CACHE CYCLE 
sqlserver2012.sequenceDML=SELECT NEXT VALUE FOR $QUOTEID$SEQNAME$QUOTEID
sqlserver2012.springBatchDDL=batch_sqlserver.ddl
sqlserver2012.masterDDL=master_sqlserver2000.ddl
sqlserver2012.validationQuery=SELECT 1

DB2

db2.database_label=DB2
db2.database_type=db2
db2.driver=com.ibm.db2.jcc.DB2Driver
db2.url=jdbc:db2://localhost:50000/wagbydb
db2.quoteid=\"
db2.quotewhere=
db2.quoteidinwhere=\"
db2.quoteidforhibernate=\"
db2.hibernateDialect=org.hibernate.dialect.DB2Dialect
db2.maxTablenameLength=128
db2.maxIndexnameLength=18
db2.maxColumnnameLength=30
db2.maxLengthStringDataType=VARCHAR(4000)
db2.characterLargeObjectDataType=CLOB
db2.supportTimeDataType=true
db2.searchStringEscapeInLike=\\\\
db2.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NO CACHE CYCLE 
db2.sequenceDML=VALUES NEXTVAL FOR $QUOTEID$SEQNAME$QUOTEID
db2.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
db2.springBatchDDL=batch_db2.ddl
db2.masterDDL=master_db2.ddl
db2.validationQuery=SELECT 1 FROM sysibm.sysdummy1

DB2 AS/400

db2400.database_label=DB2 AS/400
db2400.database_type=db2400
db2400.driver=com.ibm.as400.access.AS400JDBCDriver
db2400.url=jdbc:as400://localhost/wagbydb;naming=system;errors=full
db2400.quoteid=\"
db2400.quotewhere=
db2400.quoteidinwhere=\"
db2400.quoteidforhibernate=\"
db2400.hibernateDialect=org.hibernate.dialect.DB2400Dialect
db2400.maxTablenameLength=10
db2400.maxIndexnameLength=10
db2400.maxColumnnameLength=8
db2400.maxLengthStringDataType=VARCHAR(4000)
db2400.characterLargeObjectDataType=CLOB
db2400.supportTimeDataType=true
db2400.searchStringEscapeInLike=\\\\
db2400.createSequenceDDL=CREATE SEQUENCE $QUOTEID$SEQNAME$QUOTEID $MINVALUE$MAXVALUESTART WITH $START NO CACHE CYCLE 
db2400.dropIndexDDL=DROP INDEX $QUOTEID$INDEXNAME$QUOTEID
db2400.masterDDL=master_db2.ddl
db2400.validationQuery=SELECT 1 FROM sysibm.sysdummy1

同梱されている設定を上書きする

開発者が作成する database.txt に、標準で同梱されていた設定を再定義することができます。これによって標準の挙動を変更できます。

再定義する場合は、このデータベースに関するすべてのエントリを含めてください。(再定義しないエントリは、標準と同じ値をそのまま用います。)

Oracleを利用する場合の補足

JDBCドライバでOracleと接続するタイミングで、次のSQLを発行する必要があります。

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
ALTER SESSION SET NLS_TIME_FORMAT='HH24:MI:SS.FF3';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF3';

R8.5.11以降のバージョン

Wagby が利用しているデータベースコネクションプーリングのライブラリ DBCP2 が提供する connectionInitSqls 設定で、上記SQLを発行しています。これは Tomcat の conf/server.xml に出力されています。

R8.5.10までのバージョン

R8.0.0からR8.5.10までのバージョンでOracleを利用する場合、JDBCドライバは「jp.jasminesoft.conint.oracle.OracleDriver」が指定されています。
このファイルは Oracle が提供する JDBC ドライバクラスのラッパークラスです。connect メソッド呼び出し時に日付時刻に関するフォーマットを指定する機能を追加しています。

Oracle 19c 以降のJDBCドライバに未対応

ジャスミンソフトが作成したラッパークラス jp.jasminesoft.conint.oracle.OracleDriver は Oracle19c 以降の JDBC ドライバに対応していません。Oracle19c 以降を利用する場合は、R8.5.11 以降の Wagby をご利用ください。

jp.jasminesoft.conint.oracle.OracleDriverのソースコード

package jp.jasminesoft.conint.oracle;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.Properties;
public class OracleDriver extends oracle.jdbc.OracleDriver {
    public Connection connect(String url, Properties info)
        throws SQLException {
        Connection con = super.connect(url, info);
        Statement s = con.createStatement();
        s.execute("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'");
        s.execute("ALTER SESSION SET NLS_TIME_FORMAT='HH24:MI:SS.FF3'");
        s.execute("ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF3'");
        s.close();
        return con;
    }
    static
    {
        try {
            Enumeration en = DriverManager.getDrivers();
            while(en.hasMoreElements()) {
                Object obj = en.nextElement();
                String driverName = obj.getClass().getName();
                if ("oracle.jdbc.OracleDriver".equals(driverName)
                        || "oracle.jdbc.driver.OracleDriver".equals(driverName)) {
                    DriverManager.deregisterDriver((Driver)obj);
                }
            }
            DriverManager.registerDriver(new OracleDriver());
        }
        catch(RuntimeException runtimeexception) { }
        catch(SQLException sqlexception) { }
    }
}
    

SQLServerを利用する場合の補足

Hibernate Dialect クラス jp.jasminesoft.jfc.hibernate.dialect.SQLServerDialect

このクラスは Hibernate が提供する Dialect の継承クラスとなっており、CHARおよびVARCHARにそれぞれ nchar, nvarchar を利用するようにしたものです。SQLServerのDialectごとに用意しています。

package jp.jasminesoft.jfc.hibernate.dialect;
import java.sql.Types;
public class SQLServerDialect extends org.hibernate.dialect.SQLServerDialect {
    public static final int NVARCHAR_MAX_LENGTH = 4000;
    public SQLServerDialect() {
        super();
        registerColumnType(Types.CHAR, "nchar(1)");
        registerColumnType(Types.VARCHAR, "nvarchar(max)");
        registerColumnType(Types.VARCHAR, NVARCHAR_MAX_LENGTH, "nvarchar($l)");
    }
}

サポート

この資料に関するお問い合わせはプレミアムサポートで対応します。