我一直在努力弄清楚如何将这个数据库连接引入我的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。
答案 0 :(得分:1)
使用ServletContextListner
中创建的连接的更好方法是将其设置为ServletContext中的属性,如下所示:
event.getServletContext().setAttribute("connection_name", connection_object);
在此之后,您可以在任何这样的servlet中使用此connection_object
:
connection_object = config.getServletContext().getAttribute("connection_name");
答案 1 :(得分:0)
您的投放数据源到连接
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");
}
答案 2 :(得分: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());