使用Java从SQL Server导出二进制数据

时间:2016-05-02 03:27:49

标签: java sql sql-server jdbc blob

我有一个包含7500条记录的数据库表。我正在尝试编写可以将所有7500 jpg图像导出到我的笔记本电脑上的文件夹并根据EMPID + TYPE命名的内容。

enter image description here

因此blob将被命名为第一行的1008421_0.jpg

我在想这样的事情,但我如何命名每张图片?

String filePath = "C:/Photos/";
 try {
        Connection conn = DriverManager.getConnection(url);

        String sql = "SELECT * FROM MMOBJ WHERE EMPID > 1 ";
        PreparedStatement statement = conn.prepareStatement(sql);

        ResultSet result = statement.executeQuery();
        while (result.next()) {
            Blob blob = result.getBlob("photo");
            InputStream inputStream = blob.getBinaryStream();
            OutputStream outputStream = new FileOutputStream(filePath);

            int bytesRead = -1;
            byte[] buffer = new byte[BUFFER_SIZE];
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            inputStream.close();
            outputStream.close();

2 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题...下次请更具体。

事实上,您确实需要为每一行进行循环迭代。我建议将if (result.next())while (result.next())进行交换。 此外,您的filePath似乎是不变的,但如果我对您的问题的理解是正确的,则应依赖于EMPID

最后,请勿忘记关闭Statement和/或ResultSet以避免资源泄漏。

答案 1 :(得分:0)

我研究了如何使用此更改每行的文件名。

ResultSet result = statement.executeQuery();
        while (result.next()) {
            Blob blob = result.getBlob("LNL_BLOB");
            String name = result.getString("EMPID");
            InputStream inputStream = blob.getBinaryStream();
            OutputStream outputStream = new FileOutputStream(filePath+name+".jpg");

感谢您的协助。