我有一系列方法在servlet引擎(本例中为Tomcat)中运行,使用连接池访问以这种方式编写的数据库:

// Gets an RSS_Feed.
public static RSS_Feed get(int rssFeedNo) {
    ConnectionPool_DB pool = ConnectionPool_DB.getInstance();
    Connection connection = pool.getConnection();
    PreparedStatement ps = null;
    ResultSet rs = null;

    String query = ("SELECT * " +
                    "FROM RSS_Feed " +
                    "WHERE RSSFeedNo = ?;");

    try {
        ps = connection.prepareStatement(query);
        ps.setInt(1, rssFeedNo);
        rs = ps.executeQuery();
        if (rs.next()) {
            return mapRSSFeed(rs);
        }
        else {
            return null;
        }
    }
    catch(Exception ex) {
        logger.error("Error getting RSS_Feed " + rssFeedNo + "\n", ex);
        return null;
    }
    finally {
        Database_Utils.closeResultSet(rs);
        Database_Utils.closeStatement(ps);
        pool.freeConnection(connection);
    }
}


是否有可能在servlet引擎之外完全调用这种方法?我想在命令行中而不是在servlet引擎中执行批处理。我知道我可以简单地重写查询而无需连接池,但这是该过程涉及的许多查询之一。

连接池是通过Apache Common DBCP实现的。

ConnectionPool_DB.getInstance();读取:

private ConnectionPool_DB() {
    try {
        InitialContext ic = new InitialContext();
        dataSource = (DataSource) ic.lookup(PropertiesFile.getProperty("myApp", "DATASOURCE"));
        // dataSource = (DataSource) ic.lookup("java:/comp/env/jdbc/myApp");
    }
    catch(Exception ex) {
        logger.error("Error getting a connection pool's datasource\n", ex);
    }
}

最佳答案

我在一个项目中有这样的东西:

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("DbConnection");
ConnectionPool connectionPool = new ConnectionPool(ds)


在上下文xml中,我定义了这样的资源

<Resource name="DbConnection"
auth="SERVLET"
type="javax.sql.DataSource"
scope="Shareable"
driverClassName="**driverClassName**"
url="**url**"
username="**username**"
password="**password**"
maxActive="10"
maxIdle="10"
maxWait="1000"
/>


所以我假设你有类似的东西
如果是这样,则需要编写代码来自己创建DataSource。

这应该可以帮助您
http://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html

10-05 17:56