通过Java从MySQL数据库下载BLOB数据

编码器ACJHP

我有一个小问题;当我尝试从Mysql数据库下载数据(图片,音频...)时,我的文件受到损坏,因此文件大小为1kb。我已更改了文件扩展名,以防万一,但总是得到相同的结果。

有人可以帮我吗?

我已经尝试过使用以下代码:

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;

     public class DownloadFileFromDb {

        public static void main(String[] args) {

        final String host = "jdbc:mysql://localhost/onurDB";
        final String user = "onur";
        final String pass = "onurdb958";
        String SQL = "SELECT FILENAME FROM `PIC_STORE` WHERE `ID`=?";

        Connection conn = null;
        java.sql.PreparedStatement smt = null;
        InputStream input = null;
        FileOutputStream output = null;
        ResultSet rs = null;

        try {

            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Connecting...");

            conn = DriverManager.getConnection(host, user, pass);
            System.out.println("Connection successful..\nNow creating query...");

            smt = conn.prepareStatement(SQL);
            smt.setString(1, "4");  //in this row we have a png picture
            rs = smt.executeQuery();

            output = new FileOutputStream(new File("/Users/MacbookPro/Downloads/pic.png"));
            System.out.println("Getting file please be patient..");

            while (rs.next()) {

                input = rs.getBinaryStream("FILENAME"); //get it from col name
                int r = 0;

    /*
    *there I've tried with array but nothing changed..Like this :
    * byte[] buffer = new byte[2048];
    * int r = 0;
    * while((r = input.read(buffer)) != -1){
    *        out.write(buffer,0,r);}
    */

                while ((r = input.read()) != -1) {
                    output.write(r);

                }
            }
            System.out.println("File writing complete !");

        } catch (ClassNotFoundException e) {
            System.err.println("Class not found!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.err.println("Connection failed!");   
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            System.err.println("File not found!");
            e.printStackTrace();
        } catch (IOException e) {
            System.err.println("File writing error..!");
            e.printStackTrace();
        }finally {
            if(rs != null){
                try {
                    input.close();
                    output.flush();
                    output.close();
                    smt.close();
                    conn.close();
                } catch (SQLException e) {
                    System.err.println("Connot close connecton!");
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }

    }

}

有下载文件:pic.png文件大小为12字节。

谢谢大家。

编码器ACJHP

解决了 :

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

 public class DownloadFileFromDb {

    public static void main(String[] args) {

    final String host = "jdbc:mysql://localhost/onurDB";
    final String user = "onur";
    final String pass = "onurdb958";
    String SQL = "SELECT PICTURE FROM `PIC_STORE` WHERE `ID`=?"; //Here I mistakenly wrote 'FILANAME' here instead of a 'PICTURE'

    Connection conn = null;
    java.sql.PreparedStatement smt = null;
    InputStream input = null;
    FileOutputStream output = null;
    ResultSet rs = null;

    try {

        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Connecting...");

        conn = DriverManager.getConnection(host, user, pass);
        System.out.println("Connection successful..\nNow creating query...");

        smt = conn.prepareStatement(SQL);
        smt.setString(1, "4");  //in this row we have a png picture
        rs = smt.executeQuery();

        output = new FileOutputStream(new File("/Users/MacbookPro/Downloads/pic.png"));
        System.out.println("Getting file please be patient..");

        while (rs.next()) {

            input = rs.getBinaryStream("FILENAME"); //get it from col name
            int r = 0;

/*
*there I've tried with array but nothing changed..Like this :
* byte[] buffer = new byte[2048];
* int r = 0;
* while((r = input.read(buffer)) != -1){
*        out.write(buffer,0,r);}
*/

            while ((r = input.read()) != -1) {
                output.write(r);

            }
        }
        System.out.println("File writing complete !");

    } catch (ClassNotFoundException e) {
        System.err.println("Class not found!");
        e.printStackTrace();
    } catch (SQLException e) {
        System.err.println("Connection failed!");   
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        System.err.println("File not found!");
        e.printStackTrace();
    } catch (IOException e) {
        System.err.println("File writing error..!");
        e.printStackTrace();
    }finally {
        if(rs != null){
            try {
                input.close();
                output.flush();
                output.close();
                smt.close();
                conn.close();
            } catch (SQLException e) {
                System.err.println("Connot close connecton!");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

}

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过JSON从mysql数据库获取BLOB图像

来自分类Dev

通过JSON从mysql数据库获取BLOB图像

来自分类Dev

通过直接下载链接从数据库导出数据

来自分类Dev

通过Java注册到Mysql数据库失败

来自分类Dev

通过Mysql数据库显示信息

来自分类Dev

无法通过链接或路径从Firebase数据库下载图像

来自分类Dev

从数据库下载图像

来自分类Dev

我可以通过java在mysql数据库中以json对象的形式存储数据吗?

来自分类Dev

使用php显示通过mysql数据库保存为blob的图像(通过链接和新窗口)

来自分类Dev

MySQL通过C#将数据写入数据库

来自分类Dev

通过Ajax将数据插入mysql数据库

来自分类Dev

通过mysql数据库中的php更新数据

来自分类Dev

通过PHP从mysql数据库中获取数据

来自分类Dev

R:如何使用RJDBC从Oracle数据库下载Blob数据?

来自分类Dev

R:如何使用RJDBC从Oracle数据库下载Blob数据?

来自分类Dev

获取 Mysql 数据库更改并下载文件

来自分类Dev

将 MySQL 与下载的示例数据库连接

来自分类Dev

从在线数据库自动下载数据

来自分类Dev

从在线数据库自动下载数据

来自分类Dev

从Java在mysql中创建数据库

来自分类Dev

Java从MySQL数据库填充jcombobox

来自分类Dev

从Java在mysql中创建数据库

来自分类Dev

Java的MySQL数据库查询失败

来自分类Dev

Tomcat/Java - 插入 mysql 数据库

来自分类Dev

使用 Java 的 JSON MySQL 数据库

来自分类Dev

无法通过Openshift通过mysql数据库登录

来自分类Dev

使用Java从MySQL数据库读取数据

来自分类Dev

使用Java从mysql数据库读取数据

来自分类Dev

java将数据插入Mysql数据库