JDBC Driver Guide (v11)

JDBC 2.0 Standard Extension API

接続文字列はベンダー固有であるため、Sun は DataSource インターフェイス仕様を作成しました。これは、Java レジストリとして機能する JNDI を利用します。DataSource インターフェイスにより、JDBC 開発者は名前付きデータベースを作成することができます。開発者は、JNDI にデータベース名とベンダー固有のドライバー情報を登録します。そうすると、JDBC アプリケーションはデータベースをまったく知る必要がなく、「ピュアな JDBC」となります。

Pervasive JDBC ドライバーは JDBC 2.0 Standard Extension API をサポートしました。現在、Pervasive JDBC ドライバーは次のインターフェイスをサポートしています。

現時点では Pervasive は RowSet インターフェイスの実装を提供していませんが、Pervasive JDBC ドライバーは Sun の RowSet インターフェイス の実装で検証済みです。

DataSource

Sun はアプリケーション開発者がドライバーに依存しないアプリケーションを作成する方法を提供しています。DataSource インターフェイスと JNDI を使用することにより、アプリケーションは標準の方法でデータにアクセスでき、接続文字列のようなドライバー固有の要素をなくすことができます。DataSource インターフェイスを使用するには、データベースを JNDI サービス プロバイダーに登録する必要があります。そうすると、アプリケーションはデータベースに名前でアクセスすることができます。

次に DataSource インターフェイスの使用例を挙げます。

// このコードは、DataSource を登録するために、 
// 管理者が実行する必要があります。 
// このサンプルは、Sun の参照 JNDI 実装を使用します。 
 
public void registerDataSources() 
{  
// この例では JNDI ファイルシステム  
// オブジェクトをレジストリとして使用します。 
 
  Context ctx;     
  jndiDir = "c:¥¥jndi"; 
   
  try  
  { 
    Hashtable env = new Hashtable (5); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
"com.sun.jndi.fscontext.RefFSContextFactory"); 
     
    env.put(Context.PROVIDER_URL, jndiDir); 
    ctx = new InitialContext(env); 
  } 
  catch (Exception e) 
  { 
    System.out.println(e.toString()); 
  } 
   
  // demodata を通常のデータ ソースとして登録 
  com.pervasive.jdbc.v2.DataSource ds = new 
com.pervasive.jdbc.v2.DataSource(); 
  String dsName = ""; 
   
  try 
  { 
    // ユーザー名、パスワード、ドライバーの種類、 
    // およびネットワーク プロトコルを設定 
    ds.setUser("administrator"); 
    ds.setPassword("admin"); 
    ds.setPortNumber("1583"); 
    ds.setDatabaseName("DEMODATA"); 
    ds.setServerName("127.0.0.1"); 
    ds.setDataSourceName("DEMODATA_DATA_SOURCE"); 
    ds.setEncoding("cp850"); 
    dsName = "jdbc/demodata"; 
     
    // バインド 
    try 
    { 
      ctx.bind(dsName,ds); 
      System.out.println("バウンド データ ソース [" + 
dsName + "]"); 
    } 
    catch (NameAlreadyBoundException ne) 
    { 
      System.out.println("データ ソース [" + dsName + 
"] は既にバインドされています"); 
    } 
    catch (Throwable e) 
    { 
      System.out.println("JNDI バインド エラー:"); 
      throw new Exception(e.toString()); 
    } 
  } 
} 
 
// この DataSource をアプリケーションで使用するには、 
// 次のコードを実行することが必要 
 
public DataSource lookupDataSource(String ln) throws 
SQLException 
{ 
  Object ods = null; 
  Context ctx; 
   
  try  
  { 
    Hashtable env = new Hashtable (5); 
    env.put (Context.INITIAL_CONTEXT_FACTORY, 
"com.sun.jndi.fscontext.RefFSContextFactory"); 
     
    // JNDI ディレクトリを作成し、その名前を返す 
    // ただしそのディレクトリがまだ存在していない場合のみ 
     
    String jndiDir = "c:¥¥jndi"; 
     
    env.put(Context.PROVIDER_URL, jndiDir); 
    ctx = new InitialContext(env); 
  } 
  catch (Exception e) 
  { 
    System.out.println(e.toString()); 
  } 
  try  
  { 
    ods = ctx.lookup(ln); 
    if (ods != null) 
       System.out.println("データ ソース [" + ln + "]"+"
が見つかりました"); 
    else 
      System.out.println("データ ソース [" + ln + "]"+"
が見つかりません"); 
  } 
  catch (Exception e) 
  { 
    throw new SQLException(e.toString()); 
  } 
   
  return (DataSource)ods; 
} 
 
// ConnectionPoolDataSource も  
// 同様に扱われることに注意 

Web ベース アプリケーションの開発 (JDBC アクセス方法)

接続および並行制御 (JDBC アクセス方法)