【问题标题】:How to get realative path for database?如何获取数据库的相对路径?
【发布时间】:2026-01-31 11:00:02
【问题描述】:

我正在开发一个 jframe,通过使用文本字段等将一些数据存储在数据库中。我有以下用于数据库连接的代码。我正在使用 sqlite 数据库。

**Connectdatabase.java**

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package shreesai;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import javax.swing.JOptionPane;

    /**
     *
     * @author DeepRocks
     */
    public class Connectdatabase {

        Connection con = null;

        public static Connection ConnecrDb(){

            try{
                Class.forName("org.sqlite.JDBC");
                Connection con = DriverManager.getConnection("jdbc:sqlite:G:\\Development\\Project\\database\\shreesai.sqlite");
                return con;
            }
            catch(ClassNotFoundException | SQLException e){
                JOptionPane.showMessageDialog(null,"Problem with connection of database");
                return null;
            }
        }
}****

/* 一切都很好,但我希望如果我将此项目导出到 JAR 并且我的客户将从不同的路径运行 JAR 然后????*/

我试过使用这个代码

public class Connectdatabase {

    Connection con = null;

    public static Connection ConnecrDb(){

        try{
            String dir = System.getProperty("user.dir");
            Class.forName("org.sqlite.JDBC");
            Connection con = DriverManager.getConnection("jdbc:sqlite:"+dir+"shreesai.sqlite");
            return con;
        }
        catch(ClassNotFoundException | SQLException e){
            JOptionPane.showMessageDialog(null,"Problem with connection of database");
            return null;
        }
    }

}

即使我尝试过这个:

public class Connectdatabase {

        Connection con = null;

        public static Connection ConnecrDb(){

            try{
                String dir = System.getProperty("user.dir");
                String maindir = dir + File.separator + File.separator ;
                Class.forName("org.sqlite.JDBC");
                Connection con = DriverManager.getConnection("jdbc:sqlite:"+maindir+"shreesai.sqlite");
                return con;
            }
            catch(ClassNotFoundException | SQLException e){
                JOptionPane.showMessageDialog(null,"Problem with connection of database");
                return null;
            }
        }

    }

但是NOTHING我认为双反斜杠一定有问题导致目录返回:G:\Development\Project\database。我们想要 G:\\Development\\Project\\database\\

有什么帮助吗?

【问题讨论】:

    标签: java sql swing path


    【解决方案1】:

    你尝试的方法没有错,但只有在你的电脑上是对的,所以,解决方法很简单,把.sqlite文件放在src里面,也许你想创建一个名为Database的包,这不是必需的,但更好。

    如果.sqlite 文件在源代码中,则如下所示:

    src/shreesai.sqlite

    ....=DriverManager.getConnection("jdbc:sqlite:src/shreesai.sqlite");

    也不要绝对路径,并避免在目录中使用反斜杠(\\),因为不同的窗口平台,请改用斜杠(/)。

    【讨论】:

    • 但是 user.dir 返回的路径带有反斜杠 :(
    • * user.dir 返回带反斜杠的路径是什么意思?
    • 我正在使用 System.getProperty("user.dir");检索 src。但是那个东西用反斜杠返回路径。
    • 使用String dir = System.getProperty("...").replace("\\","/");,但是,我提到的方式不需要System.getPreo...,反正。
    • @mKorbel:为什么最后它们在jar 中,或者,我应该期待例外吗?因为我在我的一个项目中这样做了。