我正在使用纯Servlet API编写一个简单的应用程序,没有框架。该应用程序在用户文件夹内的预定义位置使用HSQLDB。我需要在第一次启动时或部署期间从应用程序内部创建表结构。
我该怎么做?
答案 0 :(得分:0)
经过一些研究后,我找到了使用ServletContextListener的解决方案。我会跳过解释并告诉你代码。
@WebListener
public class DatabaseCreator implements ServletContextListener {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource(
name = "jdbc/rssDS",
type = javax.sql.DataSource.class,
authenticationType = Resource.AuthenticationType.CONTAINER
)
private DataSource dataSource;
@Override
public void contextInitialized(ServletContextEvent sce) {
if (dataSource == null) {
logger.error("Data source wasn't initialized");
}
String sql = readStreamToString(sce.getServletContext());
if (StringUtils.isBlank(sql)) {
logger.error("SQL script is empty");
}
try {
logger.debug("Executing SQL script");
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
statement.execute(sql);
} catch (SQLException e) {
logger.error("Unable to create database table structure", e);
}
}
private String readStreamToString(ServletContext ctx) {
//skipped, reads stream contents into String
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}