如何从 Java 中的 InputStream 打开 MS Access 文件?

Posted

技术标签:

【中文标题】如何从 Java 中的 InputStream 打开 MS Access 文件?【英文标题】:How to open an MS Access file from an InputStream in Java? 【发布时间】:2015-12-24 09:00:36 【问题描述】:

我使用net.ucanaccess.jdbc.UcanaccessDriver 从 MS Access 读取数据:

public static void main(String[] args) 
    try 
        Statement statement = getConnection().createStatement();
        ResultSet resultSet = statement.executeQuery(" select * from students ");
        while (resultSet.next()) 
            String log = resultSet.getLong("id") + " - " + resultSet.getString("name") + " - " + resultSet.getString("family");
            System.out.println(log);
        
    
    catch (Exception e) 
        e.printStackTrace();
    


public static Connection getConnection() 
    Connection connection = null;

    try 
        File f = new File("files/access.accdb");
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        connection = DriverManager.getConnection("jdbc:ucanaccess://" + f.getAbsolutePath());
    
    catch (Exception e) 
        e.printStackTrace();
    

    return connection;

但现在,我想以InputStream 的身份从 MS Access 读取数据,可能是这样的:

public static Connection getConnection() 
    Connection connection = null;

    try 
        File f = new File("files/access.accdb");
        InputStream inputStream = new FileInputStream(f);
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        connection = DriverManager.getConnection(inputStream); /*Changed*/
    
    catch (Exception e) 
        e.printStackTrace();
    

    return connection;

【问题讨论】:

这根本不可能。 为什么选择@wero?你能提供一些技术信息吗? InputStream 可用于一次性阅读内容。应该如何在它之上实现 JDBC 驱动程序?因此,UcanaccessDriver 需要 mdb 文件来读取、写入或锁定... 为什么要使用 InputStream? 在我的 web 项目中,一个用户上传了一个 MS Access 文件,我将它作为 blob 保存到 oracle 数据库中,所以另一个用户登录到系统然后想查看并存储上传文件的数据进入oracle数据库的另一个表,并且可能想要编辑新记录。 【参考方案1】:

不,您不能使用 UCanAccess 直接从 InputStream 打开 Access 数据库。但是,您可以使用java.nio.Files.copy 将 InputStream 复制到一个临时文件,然后让 UCanAccess 打开它。

【讨论】:

以上是关于如何从 Java 中的 InputStream 打开 MS Access 文件?的主要内容,如果未能解决你的问题,请参考以下文章

当 jar 文件从 URL 作为 InputStream 打开时,JarEntry.getSize() 返回 -1

如何从String创建InputStream? [重复]

Java如何从InputStream中读取收入大小? [复制]

如何从 java.lang.String 获取 java.io.InputStream?

如何从 Java 8 Streams 中获取 Inputstream?

从 Java 中的 InputStream 加载 SQLite 作为 ReadOnly