我在使用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解析为类型”。