如何访问tomcat context.xml中定义的jdbc数据源?

时间:2014-01-30 15:25:46

标签: java mysql tomcat jdbc pooling

我在使用JDBC tomcat池时遇到了一些问题。我已经在context.xml中正确定义了资源,并在web.xml中引用了它。现在在我的数据库访问方法中,我想以某种方式获取用户何时从数据库获取内容的数据源。数据库访问方法如下所示:

   public class Database{       
static Connection conn = null;
static Statement stmt = null;
static ResultSet rs = null; 

    private static Connection getDBConnection(String DB) {
    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/"+DB);
    Connection conn2 = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e1) {
        e1.printStackTrace();
    }
    try {
        conn2 = ds.getConnection();         
        return conn2;

    } catch (SQLException e) {
        e.printStackTrace();
    }
    return conn2;
}

public static String GetFromDB(int row, int column) {
    String toreturn = "";
    try {
        conn = Database.getDBConnection("test");
        String sql = "SELECT id, question, answers FROM questionbank";
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        rs.absolute(row);
        toreturn = rs.getString(column);
        rs.close();
        stmt.close();
        conn.close();
    } catch (SQLException se) {
        se.printStackTrace();
    } finally {
        try {
            if (stmt != null)
                stmt.close();
        } catch (SQLException se2) {
        }
        try {
            if (conn != null)
                conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        }
    }
    return toreturn;
}

  }

context.xml中:

           Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
           maxActive="100" maxIdle="10" maxWait="10000"
           username="user" password="pass" driverClassName="com.mysql.jdbc.Driver"
           url="jdbc:mysql://localhost:3306/test"/>

Web.xml中:

  <resource-ref>
  <description>DB Connection</description>
  <res-ref-name>jdbc/TestDB</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>

问题是这三行不起作用。

            Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/testDB");

我该如何解决这个问题?

编辑:问题是“无法将InitialContext解析为类型”。

0 个答案:

没有答案