【问题标题】: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 驱动程序)。