首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接Java访问网络驱动器上的数据库

连接Java访问网络驱动器上的数据库
EN

Stack Overflow用户
提问于 2015-09-18 07:42:51
回答 2查看 1.6K关注 0票数 1

我正在创建一个桌面Java应用程序,它将使用ucanaccess作为驱动程序连接到access数据库。

整个东西将位于一个共享的网络驱动器上。

我使用绝对文件路径连接到我的数据库。我希望这个数据库能超过我在办公室的任期。当另一个用户移动数据库或更改文件夹名称时会发生什么情况...我是办公室里唯一的Java极客,所以这需要一些自动化的或容易做的人谁是…好吧,这么说吧,我不懂电脑。

我正在寻找如何解决这个问题的方法。我想打开一个文件对话框,让用户选择文件的位置,但对于我这样的人来说,这似乎是太多的工作了。它应该就会打开...

任何帮助都是非常感谢的。下面是代码示例。

代码语言:javascript
复制
package databaseTest;

import java.sql.Connection;
import java.sql.DriverManager;

public class test {

    public test() {
        try {
            String driver = "net.ucanaccess.jdbc.UcanaccessDriver";
            Class.forName(driver);
            Connection cnct = DriverManager.getConnection("jdbc:ucanaccess://c:\\users\\Christopher\\Desktop\\JavaProject\\Database11.accdb", "", "");
            System.out.println("Connected");
        } catch(Exception ex) {System.out.println(ex.getMessage());}
    }

    public static void main(String[] args) {
        System.out.println("connecting...");
        new test();
    }

}
EN

回答 2

Stack Overflow用户

发布于 2015-09-18 22:22:50

建议:

我建议您存储与数据库相关的参数/配置

  • 数据库的路径
  • 网络的名称shared Name

等等,在中。然后,您可以使用执行。你只需要确保两件事-

  • 属性文件位于项目生成路径下的目录中。
  • 如果更改了任何参数(文件已移动/重命名),则属性文件中的相应值也会更改。

这里有一个具体的例子(在Ubuntu Linux上测试)。

假设我们有一个:

存储在名为shared_dir的共享目录/path/to/sharedDirectory

  • Shared目录下的名为Foo.mdb
  • MS Access数据库

MyDatabaseProperties.properties:

代码语言:javascript
复制
pathToDB = /path/to/sharedDirectory
sharedFolderName = shared_dir
databaseName = Foo.mdb

表定义:

示例:

代码语言:javascript
复制
package com.stackoverflow.questions.Q32641670;


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;


/**
 * Initializes a connection to an MS-Access DB using JDBC/UCanAccess API, inserts a record and closes the connection.
 * <p>
 * ADDITIONAL JARS REQUIRED:
 * ------------------------
 * commons-lang-2.6.jar
 * commons-logging-1.1.1.jar
 * hsqldb.jar
 * jackcess-2.1.0.jar
 * ucanaccess-2.0.9.5.jar
 *
 * @see @link {https://stackoverflow.com/questions/32641670/connect-java-to-access-db-on-network-drive}
 * @since 18/9/15.
 */


/**
 * @author Sandeep Chatterjee
 * @version 1.0
 */
public class ConnectRemoteDB {

    /**
     * @param args The command line arguments
     */
    public static void main(String[] args) throws IOException {

        initializeConnection();

    }

    /**
     * Initializes remote database connection and inserts a record and closes the connection.
     */
    private static void initializeConnection() throws IOException {

        System.out.println("Attempting Database Connection...");

        Connection connection = null;

        PreparedStatement preparedStatement;

        try {

            final Properties PROPERTIES = new Properties();

            InputStream inputStream = ConnectRemoteDB.class.getResourceAsStream("/MyDatabaseProperties.properties");

            PROPERTIES.load(inputStream);

            String pathToDB = PROPERTIES.getProperty("pathToDB");

            String sharedFolderName = PROPERTIES.getProperty("sharedFolderName");

            String databaseName = PROPERTIES.getProperty("databaseName");

            String connectionString = "jdbc:ucanaccess:///" + pathToDB + "/" + sharedFolderName + "/" + databaseName;

            connection = DriverManager.getConnection(connectionString, PROPERTIES);
            System.out.println("CONNECTION ESTABLISHED....");
            String insertTableSQL = "INSERT INTO Table1" + "(Name) VALUES"
                    + "(?)";
            preparedStatement = connection.prepareStatement(insertTableSQL);
            preparedStatement.setString(1, "A");
            preparedStatement.executeUpdate();
            System.out.println("RECORD INSERTED...");

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                connection.close();
                System.out.println("CONNECTION CLOSED...");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

再一次:

如果将数据库移动到不同的共享目录,请设置accordingly.的值;如果重命名共享目录,请设置sharedFolderName的值;如果重命名数据库,请设置databaseName accordingly.

  • If的值;如果要重命名数据库,请设置pathToDB的值
票数 1
EN

Stack Overflow用户

发布于 2015-09-18 08:02:22

最简单的解决方案是将accdb文件放在相对于java类的位置,而不是使用绝对路径。

例如,如果java类(或您将程序打包到其中的jar )驻留在c:\share\foo.class (或c:\share\foo.jar)中,则将acdb文件放入相同的目录结构中,例如c:\share\database\Database11.accdb。

然后,可以在连接字符串中使用相对路径:

代码语言:javascript
复制
 Connection cnct = DriverManager.getConnection("jdbc:ucanaccess:database/Database11.accdb", "", "")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32641670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档