我在 Mac 上使用 IntelliJ 在带有 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);
这在我的电脑上运行良好,但我希望数据库连接独立于任何 IDE 或上级文件夹结构,因为我在一个团队中工作,每个人都有不同的文件夹结构(当然)并且不使用相同的 IDE。
intern文件夹结构是这样的:(IntelliJ生成)
java_project
│
│
├───src
│ │
│ └───main
│ └───java
│ └─Main.java
│
│
└───database
└─data.db
我一直在尝试使用相对路径字符串连接主目录中的 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 的东西。
代码将来应该在服务器上运行,因此如果我们可以选择与相对路径建立连接,那么项目位于哪个上级文件夹中并不重要。
感谢 Mark Rotteveel 的善意评论,我找到了一个解决方案,它按照我想要的方式工作:
import java.sql.Connection;
Connection connection = DriverManager.getConnection("jdbc:sqlite:"+System.getProperty("user.dir")+"/database/data.db");
该语句可以位于文件层次结构中的任何位置,如问题所示。