简体   繁体   English

如何使用 java 从 oracle blob 中检索 zip 文件?

[英]How to retrieve an zip file from oracle blob using java?

I have an zip file stored in an Oracle database table which is consisting of three different xml files.我有一个 zip 文件存储在 Oracle 数据库表中,该表由三个不同的 xml 文件组成。 What I'm trying to do is get this zip file in my local file system.我想要做的是在我的本地文件系统中获取这个 zip 文件。 To retrieve this zip file I have written below java code:为了检索这个 zip 文件,我在下面编写了 java 代码:

package com.pack.IOT;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test2 {

    public static Connection con;
    public static PreparedStatement stmt;

    public static void main(String[] args) {

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");           
            con = DriverManager.getConnection(url,uname,pwd);           
            stmt=con.prepareStatement("select * from FileStore");

            ResultSet rs=stmt.executeQuery();
            while (rs.next()) {
                InputStream is = rs.getBinaryStream(3);
                convert(is);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        finally {
            try {
                stmt.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
}

    }

    private static void convert(InputStream is) {

        FileOutputStream outputStream = null;
        File file = new File("C:\\Users\\nshaik\\Desktop\\IOTZip.zip");
        try {
        outputStream = new FileOutputStream(file);
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayOutputStream buf = new ByteArrayOutputStream();
        int result;

        result = bis.read();

        while (result != -1) {
            buf.write((byte) result);
            result = bis.read();
        }           
        outputStream.write(buf.toByteArray());
        System.out.println("File write success....");
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
        try {
            outputStream.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
  }
}

The code is running fine, but I'm seeing an error "Unexpected end of archive", and this zip file should contain three different files, but I see only one file and it has a size of zero.代码运行正常,但我看到错误“存档意外结束”,这个 zip 文件应该包含三个不同的文件,但我只看到一个文件,它的大小为零。

I'm not sure what I'm doing wrong, anyone's help would be really appreciated.我不确定我做错了什么,非常感谢任何人的帮助。

Below is the working code for above requirement,以下是上述要求的工作代码,

package com.pack.IOT;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test2 {

    public static Connection con;
    public static PreparedStatement stmt;

    public static void main(String[] args) {

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");           
            con = DriverManager.getConnection(url,uname,pwd);           
            stmt=con.prepareStatement("select * from FileStore");

            ResultSet rs=stmt.executeQuery();
            while (rs.next()) {
                InputStream is = rs.getBinaryStream(3);
                convert(is);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        finally {
            try {
                stmt.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
}

    }

    private static void convert(InputStream is) {

        FileOutputStream outputStream = null;
        File file = new File("C:\\Users\\nshaik\\Desktop\\IOTZip.zip");
        try {
        outputStream = new FileOutputStream(file);
        BufferedInputStream bis = new BufferedInputStream(is);
        ByteArrayOutputStream buf = new ByteArrayOutputStream();
        int result;

        result = bis.read();

        while (result != -1) {
            buf.write((byte) result);
            result = bis.read();
        }           
        outputStream.write(buf.toByteArray());
        System.out.println("File write success....");
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
        try {
            outputStream.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM