異なるデータベースに対するvalidationQuery


DBCP異なるデータベースに対するvalidationQuery


DBCP接続プールを使用する場合は、testOnBorrowとtestOnReturnプロパティを設定して、この接続が使用可能かどうかをテストできます.残念なことにvalidationQueryを設定する必要があります.では問題はvalidationQueryという値をどのように設定するかです.

validationQueryとは?


validationQueryは、少なくとも1つのデータを返すSELECT文である必要があるデータベース接続を検証するためのクエリー文です.各データベースにはそれぞれの検証文があり、次の表にはいくつかの一般的なデータベースのvalidationQueryが収集されています.
DataBase
validationQuery
hsqldb
select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle
select 1 from dual
DB2
select 1 from sysibm.sysdummy1
MySql
select 1
Microsoft SqlServer
select1
postgresql
select version()
ingres
select 1
derby
values 1
H2
select 1
 

JDBCドライバによるvalidationQueryの取得


複数のデータベースをサポートしたい場合は、JDBCドライバに基づいてvalidationQueryを取得できます.ここには簡単なクラスがあります.JDBCドライバ名に基づいてvalidationQueryを取得します.
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ValidationQuery {

    public String getValidationQuery(String driver) {
        Properties properties = loadProperties();
        return properties.getProperty(driver, "");
    }

    private Properties loadProperties() {
        String propertyFilename = "db.validation.properties";
        try {
            Properties props = new Properties();
            InputStream resourceAsStream = this.getClass().
            getClassLoader().getResourceAsStream(propertyFilename);
            props.load(resourceAsStream);
            resourceAsStream.close();
            return props;
        } catch (IOException e) {
            throw new RuntimeException("Cannot load properties file '" + propertyFilename + "'.", e);
        }
    }

    //Example: Get validationQuery for hsqldb
    public static void main(String[] args) {
        System.out.println(new ValidationQuery().getValidationQuery("org.hsqldb.jdbcDriver"));
    }
}

db.validation.propertiesファイルを作成しclasspathディレクトリの下に配置
#hsqldb
org.hsqldb.jdbcDriver=select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
#Oracle
oracle.jdbc.driver.OracleDriver=select 1 from dual
#DB2
com.ibm.db2.jcc.DB2Driver=select 1 from sysibm.sysdummy1
#mysql
com.mysql.jdbc.Driver=select 1
org.gjt.mm.mysql.Driver=select 1
#microsoft sql
com.microsoft.sqlserver.jdbc.SQLServerDriver=select 1
#postgresql
org.postgresql.Driver=select version();
#ingres
com.ingres.jdbc.IngresDriver=select 1
#derby
org.apache.derby.jdbc.ClientDriver=values 1
#H2
org.h2.Driver=select 1