スタンドアローンJavaアプリケーションからJNDIプロバイダへの接続

 このプログラムも前のページと同様、指定したテーブルに対して

SELECT * FROM {テーブル名} WHERE 1=2
というSQLを発行して、 出てくるカラムの情報(ResultSetMetaDataオブジェクト) を表示するプログラムです。 カラムの名前、データ型、小数点以下の桁数を表示します。

 今度のプログラムは、自分でデータベース接続情報を定義せずに、 近くで動いているJNDIプロバイダ に登録されているDataSourceを検索して取得します。 ここでは、JNDIプロバイダとして2つのJ2EEアプリケーションサーバ、 マクロメディアのJRun 4.0SP1と、JBoss.orgのJBoss 3.2.1を試します。

/**
 * TableDefListerJndi.java
 * 2003/06/07
 */
import java.sql.*;
import java.io.*;
import javax.naming.*;
import javax.sql.DataSource;

/**
 * 指定したテーブルの表定義を表示するクラスです。
 */
public class TableDefListerJndi {
  //static final String jndiName = "java:comp/env/jdbc/mudb";
  static final String jndiName = "jdbc/mudb";

  /**
   * パラメータで指定された名前の表の定義を検索して表示します。
   */
  public void list(String tableName)
  throws SQLException, NamingException {
    Context c = new InitialContext();
    DataSource ds = (DataSource) c.lookup(jndiName);
    Connection conn = ds.getConnection();

    Statement stmt = conn.createStatement ();
    ResultSet rset = stmt.executeQuery(
      "SELECT * FROM " + tableName + " WHERE 1 = 2"
    );
    ResultSetMetaData rsmd = rset.getMetaData();
    int colCount = rsmd.getColumnCount();
    for(int i=1; i<=colCount; i++){
      System.out.println(rsmd.getColumnName(i) + "\t" +
        rsmd.getColumnTypeName(i) + "\t" + rsmd.getScale(i));
    }
    rset.close();
    stmt.close();
    conn.close();
  }

  public static void main(String[] args) throws SQLException {
    TableDefListerJndi lister = new TableDefListerJndi();
    try {
      lister.list("SHITEN");
      System.out.println("正常終了");
    } catch(Exception ex){
      ex.printStackTrace();
    }
  }
}
// end.

プログラムは本来JNDIプロバイダによって変える必要はありませんが、 JNDI名の解決の仕方がJRunはちょっと特殊 (java:comp/envをつける必要がない)なので、 そこの部分だけ切り替えが必要な場合があります。

 JNDIプロバイダへの接続情報は、 「jndi.properties」というファイルを作って、CLASSPATHの通っている位置に置くか、 Propertiesオブジェクトに情報を格納してInitialContextのコンストラクタに渡すか、 の方法があります。今回はjndi.propertiesを書く方法で試しました。 上がJRun、下がJBossに接続するときのごく標準的な jndi.propertiesです。

java.naming.factory.initial=jrun.naming.JRunContextFactory
java.naming.provider.url=localhost:2908
java.naming.factory.url.pkgs=jrun.naming

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

JDBC and Swing Top

(first uploaded 2003/06/08 last updated 2003/06/08, URANO398)

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル