【问题标题】:apache tomcat creating new instance of sqlite database in javaapache tomcat在java中创建sqlite数据库的新实例
【发布时间】:2020-07-20 15:27:37
【问题描述】:

我使用xerial sqlite jdbc driver 在java 中使用sqlite 数据库来存储一些数据,一次1 个连接。 在我决定在我的服务器上使用 Apache tomcat 而不是 java 套接字(用于测试)之前它工作得很好,我注意到我的查询产生了空结果,尽管数据库上有数据。 我搜索了这个问题,显然tomcat创建了这个数据库的一个新实例,它具有相同的表但没有数据。 我尝试将我的数据库移动到资源文件夹中,但这没有帮助。

public static Connection getConn() throws SQLException {
      if(c == null){
         c = DriverManager.getConnection("jdbc:sqlite:database.db");
      }
      return c;
   }

这就是代码连接数据库的方式。我相信移动数据库和更改地址应该可以解决问题,但我不知道去哪里。 谢谢!

【问题讨论】:

    标签: java sql database sqlite tomcat


    【解决方案1】:

    您应该能够在 JDBC URL 中使用现有数据库文件的完整路径 - 因此,类似于:

    "jdbc:sqlite:/path/to/your/mysqlite.db"
    

    如果您使用的是 Windows,那么它可能如下所示:

    "jdbc:sqlite:C:/path/to/your/mysqlite.db"
    

    这些是绝对路径的示例。

    在您的情况下,您的 JDBC URL 中的数据库位置只是 mysqlite.db,没有额外的路径信息。这是一个相对路径,因为它不以斜杠或驱动器号开头。

    这意味着 DB 文件的位置相对于 Java 程序的工作目录(程序启动的地方)。对于 Tomcat,这通常是 CATALINA_HOME/bin 目录 - 其中 CATALINA_HOME 通常是安装 Tomcat 的位置。 (这可能因 Tomcat 的安装和启动方式而异。)

    我建议您将数据库文件保存在与 Tomcat 不同的位置。

    (SQLite 将在指定位置创建一个新的空数据库,如果该数据库尚不存在 - 所以创建它的不是 Tomcat,而是 SQLite 驱动程序)。

    【讨论】:

      猜你喜欢
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多