0

我一直在努力弄清楚如何将这个数据库连接引入到我的 servlet 中,但是失败了,因此在这里发布了这篇文章。

基本上,我使用的是我在这个网站上找到的这段代码——一个由 BalusC 教授的代码。

public class Config implements ServletContextListener {
    private static final String ATTRIBUTE_NAME = "config";
    private DataSource dataSource;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        ServletContext servletContext = event.getServletContext();
        String databaseName = servletContext.getInitParameter("pract1");
        try {
            dataSource = (DataSource) new InitialContext().lookup("java:/comp/env/jdbc/TestDB");  
        } catch (NamingException e) {
            throw new RuntimeException("Config failed: datasource not found", e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        System.out.println("contextDestroyed....");
    }

    public DataSource getDataSource() {
        return dataSource;
    }

    public static Config getInstance(ServletContext servletContext) {
        return (Config) servletContext.getAttribute(ATTRIBUTE_NAME);
    }
}

他解释说你有这个类,并且所有 servlet 的连接都会启动一次,所以我认为这样做是一个很好的做法。

现在,我的问题是我不知道如何使在 Config、context.xml 文件等中设置的数据库连接在 servlet 中工作。

这是我尝试过的,但没有成功:

Connection con = null;
Config a = new Config();
con = (Connection) a.getDataSource();
DBConnect dbConnect = new DBConnect();
con = dbConnect.getConnection();                        

stmt = con.createStatement();                   
rs = stmt.executeQuery("SELECT * FROM members"); 

我希望有人能告诉我如何将连接带入我的 doPost Servlet。

4

3 回答 3

1

使用创建的连接的更好方法ServletContextListner是将其设置为 ServletContext 中的属性,如下所示:

event.getServletContext().setAttribute("connection_name", connection_object);

在此之后,您可以 connection_object在任何 servlet 中使用它,如下所示:

connection_object = config.getServletContext().getAttribute("connection_name");
于 2013-09-30T06:00:18.257 回答
0

您将数据源转换为 Connection

     Connection con = null;
     con = (Connection) a.getDataSource(); 

请改为

     DataSource dataSource= null;
     dataSource = (DataSource) a.getDataSource(); // Your casting datasource to Connection 

     //get the connection from datasource

     if (dataSource!= null) {
        con = dataSource.getConnection();
     }
     if (con!= null) {
       stmt = con.createStatement();                   
       rs = stmt.executeQuery("SELECT * FROM members"); 
     }
于 2013-09-30T06:03:58.533 回答
0

用这个:

 Connection con = ((DataSource) a.getDataSource()).getConnection();

而不是这个:

 Connection con = null;
 con = (Connection) a.getDataSource();
 DBConnect dbConnect = new DBConnect();
 con = dbConnect.getConnection();                        

假设您已设置:

Config a = Config.getInstance(request.getServletContext());
于 2013-09-30T06:16:10.523 回答