如何获得我的文件的真实路径?

时间:2016-06-04 20:38:16

标签: java database ms-access connection

我正在使用netbeans和MS Acces作为我的数据库处理Web应用程序,在我的连接类中,我试图通过以下命令获取我的acces文件的路径(位于我的项目中):

  File f = new File("softTech.accdb");
  String path = f.getAbsolutePath();

问题是,一旦我运行项目并尝试连接,当尝试获取路径时,系统会在tomcat的粘贴内部给我一个路径

我需要你的帮助,不知道该怎么做 提前致谢

2 个答案:

答案 0 :(得分:1)

有两点:

首先:作为Java Web应用程序的数据库,MS Access确实是最糟糕的选择。

MS Access是一个桌面数据库,不是为在服务器端使用它而制作的。 JDBC-ODBC桥从未用于生产用途,并且已在Java 8中删除。 备用驱动程序Ucanaccess适用于MS Access数据库的数据交换场景,但它使用纯Java数据库(HSQLDB)作为缓冲区和仿真层来避免使用原始Jet Engine。仅这一点就是表演的噩梦。

因此,您应该考虑为您的Web应用程序使用另一个数据库。有许多替代方案,如SQLite,Apache Derby或H2作为嵌入式数据库引擎或MySQL,PostgreSQL作为客户端 - 服务器数据库系统。全部都有专门的JDBC驱动程序支持。

第二:不应在Web应用程序中对数据库路径或连接进行硬编码。您应在应用程序服务器(例如Tomcat)中配置命名数据源。在Web应用程序中,您可以通过JNDI访问数据源。

示例:在Tomcat中配置数据库连接工厂:

<Context ...>
  ...
  <Resource name="jdbc/EmployeeDB"
            auth="Container"
            type="javax.sql.DataSource"
            username="dbusername"
            password="dbpassword"
            driverClassName="org.hsql.jdbcDriver"
            url="jdbc:HypersonicSQL:database"
            maxActive="8"
            maxIdle="4"/>
  ...
</Context>

示例:通过JNDI访问数据源:

Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)
  envCtx.lookup("jdbc/EmployeeDB");

Connection conn = ds.getConnection();
... use this connection to access the database ...
conn.close();

这些示例是Tomcat documentation的一部分。

好处是,Web应用程序只知道逻辑数据库名称。您可以安装多个Tomcat,例如一个用于测试数据库和一个生产。您可以对两个安装使用相同的WAR文件。每个Tomcat只需配置一次。

答案 1 :(得分:0)

如果您正在使用servlet,则以下代码应该可以正常工作。

getServletContext().getRealPath("/yourFileName")

如果是普通的java类,可以使用

new File("yourFileName").getCanonicalPath();