Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在BLOB mysql中上传字节[]似乎被切碎了,为什么?_Java_Mysql_Jdbc_Blob - Fatal编程技术网

Java 在BLOB mysql中上传字节[]似乎被切碎了,为什么?

Java 在BLOB mysql中上传字节[]似乎被切碎了,为什么?,java,mysql,jdbc,blob,Java,Mysql,Jdbc,Blob,嗨,伙计们,你好吗 我正试图通过enctype=“multipart/form data”将图像上传到mysql行,结果很奇怪: 使用Java JSP查看图像: <a href="viewevent?id=<%= viewevent.getId()%>"> <img alt="" class="img-responsive image1" src="ViewImage?id=<%= viewevent.getId() %>"> <

嗨,伙计们,你好吗

我正试图通过enctype=“multipart/form data”将图像上传到mysql行,结果很奇怪:

使用Java JSP查看图像:

 <a href="viewevent?id=<%= viewevent.getId()%>">
    <img alt="" class="img-responsive image1" src="ViewImage?id=<%= viewevent.getId() %>">
 </a>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String id = request.getParameter("id");

    DataAccess bd = new DataAccess();
    bd.openConnection();
    ResultSet rs = bd.exQuery("SELECT * FROM eventos WHERE id="+id , "SELECT");

    try{
        while(rs.next()){
            response.setContentType("image/png");
            System.out.println(rs.getBytes("foto"));
            response.getOutputStream().write(rs.getBytes("foto"));

            response.reset();
            response.setContentType("image/png");
            // Write image content to response.
            response.getOutputStream().write(rs.getBytes("foto"));
        }
        bd.closeConnection();
    }catch(Exception e){
        System.out.println("Error cogiendo foto");
    }



}
                    <form action="addevent" method="post" enctype="multipart/form-data">
                        ...
                        <div class="form-group">
                            <label for="foto">Image</label>
                            <input name="foto" id="imagen" type=file accept=".jpg, .jpeg, .png">                                 
                        </div>                          
                       ...
                    </form>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    ...
    Part foto = request.getPart("foto");
    ...
    byte[] data = new byte[(int) foto.getSize()];
    foto.getInputStream().read(data, 0, data.length);

    bd.exQuery("UPDATE eventos SET foto = '"+data+"' WHERE titulo='"+titulo+"';", "UPDATE");
    bd.closeConnection();
...

}
上传图像的Java JSP:

 <a href="viewevent?id=<%= viewevent.getId()%>">
    <img alt="" class="img-responsive image1" src="ViewImage?id=<%= viewevent.getId() %>">
 </a>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String id = request.getParameter("id");

    DataAccess bd = new DataAccess();
    bd.openConnection();
    ResultSet rs = bd.exQuery("SELECT * FROM eventos WHERE id="+id , "SELECT");

    try{
        while(rs.next()){
            response.setContentType("image/png");
            System.out.println(rs.getBytes("foto"));
            response.getOutputStream().write(rs.getBytes("foto"));

            response.reset();
            response.setContentType("image/png");
            // Write image content to response.
            response.getOutputStream().write(rs.getBytes("foto"));
        }
        bd.closeConnection();
    }catch(Exception e){
        System.out.println("Error cogiendo foto");
    }



}
                    <form action="addevent" method="post" enctype="multipart/form-data">
                        ...
                        <div class="form-group">
                            <label for="foto">Image</label>
                            <input name="foto" id="imagen" type=file accept=".jpg, .jpeg, .png">                                 
                        </div>                          
                       ...
                    </form>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
    ...
    Part foto = request.getPart("foto");
    ...
    byte[] data = new byte[(int) foto.getSize()];
    foto.getInputStream().read(data, 0, data.length);

    bd.exQuery("UPDATE eventos SET foto = '"+data+"' WHERE titulo='"+titulo+"';", "UPDATE");
    bd.closeConnection();
...

}
当我将MySQL中的BLOB文件保存为txt文件时,我得到以下内容:

[B@2a83de12 
[B@3d00eeab
...
正如你所看到的,当我将它们保存为txt时,我只得到一些字符。。。有了这段代码,我无法上传图片并在src上查看它们。我不知道我做错了什么,但这行不通

提前谢谢

bd.exQuery("UPDATE eventos SET foto = '"+data+"' WHERE titulo='"+titulo+"';", "UPDATE");
问题就在这里。您正在执行SQL字符串连接,它调用
字节[]。toString()
,这会产生类似
[B@2a83de12
。您应该使用带有参数标记的准备语句,并通过参数向准备语句提供BLOB:

PreparedStatement ps = conn.prepareStatement("UPDATE eventos SET foto = ? WHERE titulo=?");
ps.setObject(1, data);
ps.setObject(2, titulo);
int rowCount = ps.executeUpdate();

ResultSet rs=bd.exQuery(“SELECT*FROM eventos,其中id=“+id
”@fge我知道SQL注入可能会在那里发生,但这不会投入生产,所以我不介意。@RomanC我试图将其替换为data.toString()但我得到了同样的结果口头上说:不要使用SQL连接。永远不要。各种各样的陷阱潜伏其中。“不用于生产”并不能改变这一点。