如何建立JDBC数据库连接(SQLite),其相对路径独立于任何IDE或高级文件夹结构

How do establish an JDBC database connection (SQLite) with a relative path independent from any IDE or superior folder structure

提问人:koyashiba 提问时间:11/10/2023 最后编辑:Mark Rotteveelkoyashiba 更新时间:11/16/2023 访问量:38

问:

我在带有 IntelliJ 的 Mac 上使用 SQLite 的 Maven 项目,并且我已经成功地建立了与具有绝对路径的数据库的连接:

import java.sql.*;
Connection connection = null;
String url = "jdbc:sqlite:/Users/user/any/dir/java_project/database/data.db";
connection DriverManager.getConnection(url);

这在我的 PC 上工作正常,但我希望数据库连接独立于任何 IDE 或上级文件夹结构,因为我在一个团队中工作,每个人都有不同的文件夹结构(当然)并且不使用相同的 IDE。

intern 文件夹结构是这样的:(IntelliJ 生成)

java_project
│  
│
├───src
│   │
│   └───main
│       └───java
│            └─Main.java
│  
│  
└───database
    └─data.db

我一直在尝试将 Main 中的 SQLite 文件与相对路径字符串连接起来,例如:

url = "jdbc:sqlite:../../../database/data.db"

但只有绝对路径有效。 我发现线程:sqlite jdbc Eclipse数据库相对路径

但是这个人搜索了一个特定于 Eclipse 的解决方案。不过

String url="jdbc:sqlite:"+dbfile.getAbsolutePath()+"\\Demo.db";

看起来不错,但我不知道,我如何导入 data.db 文件以使用该方法引用它。

我发现的另一件事是:

connection = DriverManager.getConnection("jdbc:sqlite:"+$PROJECT_DIR$+"/database/data.db");

但是 IntelliJ 无法解析符号,我没有花太多精力来完成这项工作,因为我相信它是特定于 IntelliJ 的,我想要一些不依赖于 IDE 的东西。

代码将来应该在服务器上运行,所以如果我们可以选择与相对路径建立连接,那就太好了,这样项目在哪个上级文件夹中就无关紧要了。

java sqlite jdbc

评论

0赞 Mark Rotteveel 11/10/2023
IIRC,IntelliJ 将当前工作目录设置为 IntelliJ 项目的根目录,因此 Java 解析将解析相对于该位置的文件。我不记得 Eclipse 是做什么的。
1赞 Mark Rotteveel 11/10/2023
一个好的起点是获取当前工作目录:如何在 Java 中获取当前工作目录?
0赞 Basil Bourque 11/10/2023
仅供参考,主要的主机操作系统(macOS、Windows、Linux)都有一个特定的文件夹,用于放置支持应用程序的文件。
0赞 koyashiba 11/10/2023
谢谢@MarkRotteveel,System.getProperty(“user.dir”)工作正常。一个非常简单的解决方案,我没有想到。

答:

0赞 koyashiba 11/16/2023 #1

感谢 Mark Rotteveel 的友好评论,我找到了一个解决方案,它按照我的意愿工作:

import java.sql.Connection;
Connection connection = DriverManager.getConnection("jdbc:sqlite:"+System.getProperty("user.dir")+"/database/data.db");

该语句可以位于文件层次结构中的任何位置,如问题中所示。