3

これは私の jboss/deploy/postgres-ds.xml ファイルです。接続 URL、ユーザー名、およびパスワードがここに表示されます。サーブレットでこのデータベースへの接続を取得するにはどうすればよいですか。

<local-tx-datasource>
        <jndi-name>PostgresDS</jndi-name>
        <connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url>
        <driver-class>org.postgresql.Driver</driver-class>
        <user-name>postgres</user-name>
        <password>qwerty</password>
            <!-- sql to call when connection is created
            <new-connection-sql>some arbitrary sql</new-connection-sql>
            -->

            <!-- sql to call on an existing pooled connection when it is obtained from pool 
            <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
            -->

          <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->

      </local-tx-datasource>

すべてのサーブレットで次のような接続を取得する必要があります:

Connection conn =null; // Create connection object
        String database = "postgres"; // Name of database
        String user = "postgres"; //
             String password = "qwerty";
             String url = "jdbc:postgresql://localhost:5432/" + database;
ResultSet rs = null;
             ResultSetMetaData rsm = null;  
 try{
Class.forName("org.postgresql.Driver").newInstance();
//.newInstance()
} catch(Exception e) 
   {
System.err.println(e);
}

try{
conn = DriverManager.getConnection(url, user, password);

}catch(SQLException se) 
{
System.err.println(se);
}

これを毎回行う必要がある場合、postgres-ds.xml ファイルで URL、ユーザー名、およびパスワードを指定する必要はありません。

4

3 に答える 3

7

DataSource を使用して Connection を取得できます

javax.naming.Context ic = new javax.naming.InitialContext();
javax.naming.Context ctx = (javax.naming.Context) ic.lookup("java:");
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("PostgresDS");
java.sql.Connection con = ds.getConnection();
于 2012-05-16T06:21:53.683 に答える
2

いいえ - J2EE アプリ (JBoss ベースのアプリなど) で「データ ソース」を使用することと、標準の JDBC 接続を開くこと (単純な Java アプリケーションで行うように) は、多かれ少なかれ相互に排他的です。

アプリは通常、どちらか一方を実行します。あなたの場合、データソースを使用してください。

JNDI データソースを使用し、JDBC 接続を直接開くという、両方のアプローチを示す優れたスニペットを次に示します。

http://www.javapractices.com/topic/TopicAction.do?Id=127

/** Uses JNDI and Datasource (preferred style).   */
static Connection getJNDIConnection(){
String DATASOURCE_CONTEXT = "java:comp/env/jdbc/blah";

Connection result = null;
try {
  Context initialContext = new InitialContext();
  if ( initialContext == null){
    log("JNDI problem. Cannot get InitialContext.");
  }
  DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
  if (datasource != null) {
    result = datasource.getConnection();
  }
  else {
    log("Failed to lookup datasource.");
  }
}
catch ( NamingException ex ) {
  log("Cannot get connection: " + ex);
}
catch(SQLException ex){
  log("Cannot get connection: " + ex);
}
return result;
于 2012-05-16T06:23:22.257 に答える
0

JBoss を使用している場合は、JPAなどの組み込みの EE API を利用することをお勧めします。

したがって、どこにも接続情報を再入力する必要はありません。コンテナにサーブレットに an を注入させるEntityManagerか (EE 6 with CDIを使用している場合)、 DAOのようなものを(EE6 なしで) 作成します。

JBoss で Hibernate を使用しているこの JPA の例を参照してください。

于 2012-05-16T06:19:16.140 に答える