2012-05-16 69 views
1

這是我的jboss/deploy/postgres-ds.xml文件。連接網址,用戶名和密碼在這裏給出。如何在我的servlet中獲得與此數據庫的連接。在JBoss中獲取數據庫連接?

<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> 

我應該獲得在每一個servlet的這樣的連接:

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,用戶名和密碼?

回答

5

您可以使用數據源獲取的連接,如

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(); 
+0

「的java.sql.Connection CON = ds.getConnection( );」。對於每個對此函數的調用,都會返回一個不同的連接對象? – suraj

+2

從系統的角度來看,「不:不一定」。通過JDBC連接使用DS的另一個優點是使用DS可以讓您充分利用應用服務器的連接池。 – paulsm4

+0

@Satya「javax.naming.Context ctx =(javax.naming.Context)ic.lookup(」java:「);」這條線在哪裏做查找?第三行在PostGres-ds.xml文件中進行查找。對? – suraj

0

如果您正在使用JBoss,建議您利用隨附的EE API,如JPA

因此,您不需要在任何地方重新輸入連接信息。只需讓容器將一個EntityManager注入到您的servlet中(假設您使用EE 6和CDI)或創建類似DAO(不含EE6)的東西。

你可能想看看在JBoss上使用Hibernate的this JPA example

1

否 - 使用一個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; 
相關問題