H2数据库Java Servlet连接路径问题
最近,我一直在寻找一个带有本地数据库的servlet。通过一些研究,我发现()。这非常适合我的需要,但是我的servlet的本地路径有问题 例如: 我需要在我的WebContent文件夹中创建H2数据库,使其成为项目的一部分。然而,我似乎无法正确地将代码本地化 示例代码:-H2.Jar-到SQL数据库的连接字符串H2数据库Java Servlet连接路径问题,java,sql,servlets,h2,Java,Sql,Servlets,H2,最近,我一直在寻找一个带有本地数据库的servlet。通过一些研究,我发现()。这非常适合我的需要,但是我的servlet的本地路径有问题 例如: 我需要在我的WebContent文件夹中创建H2数据库,使其成为项目的一部分。然而,我似乎无法正确地将代码本地化 示例代码:-H2.Jar-到SQL数据库的连接字符串 String url = "jdbc:h2:"+request.getContextPath()+"/emailDB;IFEXISTS=TRUE";
String url = "jdbc:h2:"+request.getContextPath()+"/emailDB;IFEXISTS=TRUE";
Class.forName("org.h2.Driver");
Connection conn = DriverManager.
getConnection(url, "adminuser", "pass");
示例代码(错误):-H2.Jar-到SQL数据库的连接字符串(输出)
org.h2.jdbc.jdbcsql异常:未找到数据库“C:/emailservlet/emailDB”[90013-174]
位于org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
位于org.h2.message.DbException.get(DbException.java:172)
位于org.h2.message.DbException.get(DbException.java:149)
位于org.h2.engine.engine.openSession(engine.java:54)
位于org.h2.engine.engine.openSession(engine.java:160)
位于org.h2.engine.engine.createSessionAndValidate(engine.java:139)
位于org.h2.engine.engine.createSession(engine.java:122)
位于org.h2.engine.engine.createSession(engine.java:28)
位于org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:323)
JdbcConnection(JdbcConnection.java:105)
JdbcConnection(JdbcConnection.java:90)
位于org.h2.Driver.connect(Driver.java:73)
位于java.sql.DriverManager.getConnection(未知源)
位于java.sql.DriverManager.getConnection(未知源)
在emailservlet.msdbcon(emailservlet.java:540)
正如您所看到的,我遇到的问题是,即使我请求contextpath,我仍然得到了以前编写的C:/
如果你能帮我找出代码中的错误,那将非常有帮助
提前谢谢你 驱动程序需要可以创建文件的文件系统路径。它使用根目录(即C:驱动器)将相对路径转换为绝对路径。要获取WebContent文件夹的绝对路径,您需要使用 另外,将H2文件存储在WebContent文件夹中也不是一个好主意。您应该将它们存储在WEB-INF文件夹中,这样用户就无法访问它 下面是如何形成url的
String path = getServletContext().getRealPath("/") + "/WEB-INF";
String url = "jdbc:h2:"+path+"/emailDB;IFEXISTS=TRUE";
这将在WEB-INF文件夹中创建H2文件
从H2Database.com网站上获取的注意事项:
- 用于连接到本地数据库的数据库URL是jdbc:h2:[文件:][]前缀文件:是可选的。如果不使用或仅使用相对路径,则当前工作目录将用作起点李>
- 路径和数据库名称的大小写敏感度取决于操作系统,但建议仅使用小写字母李>
- 数据库名称的长度必须至少为三个字符(File.createTempFile的限制)李>
- 数据库名称不能包含分号李>
- 要指向用户主目录,请使用~/,如:jdbc:h2:~/test中所示
String path = getServletContext().getRealPath("/") + "/WEB-INF";
String url = "jdbc:h2:"+path+"/emailDB;IFEXISTS=TRUE";