使用 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 从远程服务器中的数据库读取的主要内容,如果未能解决你的问题,请参考以下文章
使用 EclipseLink 和 UCanAccess 的持久性错误