H2数据库Java Servlet连接路径问题



最近我一直在研究使用一个带有本地数据库的servlet。经过一点研究,我发现了H2数据库引擎(维基百科(。这非常适合我想要的,但我的servlet的本地路径有问题。

示例:

我需要在我的WebContent文件夹中创建H2数据库,使其成为项目的一部分。然而,我似乎无法获得正确的代码来本地化它。

示例代码:-H2.Jar-到SQL数据库的连接字符串

             String url = "jdbc:h2:"+request.getContextPath()+"/emailDB;IFEXISTS=TRUE";
         Class.forName("org.h2.Driver");
            Connection conn = DriverManager.
                getConnection(url, "adminuser", "pass");

示例代码(错误(:-H2.Jar-到SQL数据库的连接字符串(OUTPUT(

org.h2.jdbc.JdbcSQLException: Database "C:/emailservlet/emailDB" not found [90013-174]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
at org.h2.message.DbException.get(DbException.java:172)
at org.h2.message.DbException.get(DbException.java:149)
at org.h2.engine.Engine.openSession(Engine.java:54)
at org.h2.engine.Engine.openSession(Engine.java:160)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:139)
at org.h2.engine.Engine.createSession(Engine.java:122)
at org.h2.engine.Engine.createSession(Engine.java:28)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:323)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:105)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:90)
at org.h2.Driver.connect(Driver.java:73)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at emailservlet.msdbcon(emailservlet.java:540)

正如你所看到的,我得到的问题是,即使我请求上下文路径,我仍然得到了以前写的C:/。

如果你能帮我找出代码中的错误,那将非常有帮助!

提前谢谢!

驱动程序需要可以创建文件的文件系统路径。它使用根目录将相对路径转换为绝对路径,根目录是您的C:驱动器。要获得WebContent文件夹的绝对路径,您需要使用ServletContext#getRealPath((

此外,将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:][]前缀文件:是可选的。如果不使用或只使用相对路径,则使用当前工作目录作为起点
  • 路径和数据库名称的大小写敏感度取决于操作系统,但建议仅使用小写字母
  • 数据库名称的长度必须至少为三个字符(File.createTempFile的限制(
  • 数据库名称不能包含分号
  • 要指向用户主目录,请使用~/,如:jdbc:h2:~/test中所示

最新更新