最近,我一直在研究将servlet与本地数据库一起使用。经过一些研究,我发现了H2数据库引擎(Wikipedia)。这对我想要的东西来说是完美的,但是我的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数据库的连接字符串(输出)
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)
如您所见,我遇到的问题是,即使即时消息请求了contextpath,我仍然仍然在写C:/。
如果您可以帮助我找出代码中的错误,将非常有帮助!
先感谢您!
驱动程序期望可以在其中创建文件的文件系统路径。它通过使用C:驱动器的根目录将相对路径转换为绝对路径。要获取WebContent文件夹的绝对路径,您需要使用ServletContext#getRealPath()
将H2文件存储在WebContent文件夹中也不是一个好主意,您应该将它们存储在WEB-INF文件夹中,以使用户无法访问它。
以下是网址的格式
String path = getServletContext().getRealPath("/") + "/WEB-INF";
String url = "jdbc:h2:"+path+"/emailDB;IFEXISTS=TRUE";
这将在WEB-INF文件夹中创建H2文件。
从H2Database.com网站上的“功能”页面获取的注意事项:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句