使用 UCanAccess 和 Apache Commons Net 从远程服务器中的数据库读取

Posted

技术标签:

【中文标题】使用 UCanAccess 和 Apache Commons Net 从远程服务器中的数据库读取【英文标题】:Reading from a Database in a remote Server using UCanAccess and Apache Commons Net 【发布时间】:2016-03-26 19:23:09 【问题描述】:

我有一个需要从数据库读取的 java 应用程序。 只需使用 UCanAccess 驱动程序读取 .accdb 文件 (Microsoft Access),我就能做到这一点。

public boolean connect()

    System.out.println("\n\nconnecting to database......\n\n");
    try  //connect to the database
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            con = DriverManager.getConnection("jdbc:ucanaccess://C:/Users/C92/Desktop/Database1.accdb");
            st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            return true;
        
        catch(Exception e)
        
            System.out.println(e);
            return false;
        

我还有一个客户端程序,它使用 Apache Commons Net 连接到服务器(由 FileZilla 运行)以将文件从服务器传输到客户端。

ftpClient = new FTPClient();
    ftpClient.connect(serverName, 21);
    ftpClient.login(user, pass);
    ftpClient.enterLocalPassiveMode();
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

当我想从该数据库中读取数据时,问题就开始了,但这次是在我连接的服务器上。我不知道如何结合这两种实现(Apache Commons Net 和 UCanAccess)来读取服务器中的 .accdb 文件。

请如果您熟悉网络,您可以帮助我解决这个问题。谢谢!

【问题讨论】:

推测FTPClient()对象将从服务器下载文件,所以只需将文件下载到已知位置(例如,使用java.io.File.createTempFile),然后将本地副本的绝对路径包含在JDBC 连接 URL。 谢谢@GordThompson,但我不想从服务器下载数据库,我只想阅读它。客户端程序将下载其他文件,但不下载数据库。无论如何,谢谢,如果你知道我怎样才能做到这一点,请告诉我;) 您需要先下载它才能阅读。数据库需要通过java.io.File 对象访问,我很确定没有办法直接通过 FTP 连接进行访问。 好的。所以我无法使用驱动程序并指定服务器及其端口,例如:jdbc:ucanaccess:ip address:port/database ?? 不直接,不。我听说有人设置 JDBC 代理并在服务器端使用 UCanAccess 来操作数据库,但这比简单地建立 FTP 连接更复杂。 【参考方案1】:

我相当肯定没有办法让 UCanAccess 直接打开驻留在 FTP 服务器上的数据库文件。即使像Apache Commons VFS 这样的机制显然也没有提供直接操作远程文件或将远程文件转换为java.io.File 对象的方法。

因此,您需要先下载数据库文件,然后在 UCanAccess 连接 URL 中包含本地副本的绝对路径。

【讨论】:

以上是关于使用 UCanAccess 和 Apache Commons Net 从远程服务器中的数据库读取的主要内容,如果未能解决你的问题,请参考以下文章

ucanaccess 与 java servlet 程序

未找到适用于 ucanaccess 的驱动程序

UCanAccess、IKVM 和 C#

使用 EclipseLink 和 UCanAccess 的持久性错误

使用 Java 和 UCanAccess 更新备注字段中的日期时间和字符串

Boomi Timer 中的 uCanAccess 错误已取消