0

This is the code have no error

import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DisplayBlobServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
            ServletException {
        String photoid = request.getParameter("txtid");
        Blob photo = null;
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String query = "select oimage from orderform where  cuname = '" + photoid + "'";
        ServletOutputStream out = response.getOutputStream();

        try {
            conn = getMySqlConnection();
        } catch (Exception e) {
            response.setContentType("text/html");
            out.println("<html><head><title>Person Photo</title></head>");
            out.println("<body><h1>Database Connection Problem.</h1></body></html>");
            return;
        }

        try {
            stmt = conn.createStatement();
            rs = stmt.executeQuery(query);
            if (rs.next()) {
                photo = rs.getBlob(9);

            } else {
                response.setContentType("text/html");
                out.println("<html><head><title>Person Photo</title></head>");
                out.println("<body><h1>No photo found for id= 001 </h1></body></html>");
                return;
            }

            response.setContentType("image/gif");
            InputStream in = photo.getBinaryStream();
            int length = (int) photo.length();

            int bufferSize = 1024;
            byte[] buffer = new byte[bufferSize];

            while ((length = in.read(buffer)) != -1) {
                System.out.println("writing " + length + " bytes");
                out.write(buffer, 0, length);
            }

            in.close();
            out.flush();
        } catch (SQLException e) {
            response.setContentType("text/html");
            out.println("<html><head><title>Error: Person Photo</title></head>");
            out.println("<body><h1>Error=" + e.getMessage() + "</h1></body></html>");
            return;
        } finally {
            try {
                rs.close();
                stmt.close();
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /*private static Connection getHSQLConnection() throws Exception {
    Class.forName("jdbc.jdbcDriver");
    System.out.println("Driver Loaded.");
    String url = "jdbc:hsqldb:data/tutorial";
    return DriverManager.getConnection(url, "sa", "");
    }*/
    public static Connection getMySqlConnection() throws Exception {
        String driver = "com.jdbc.mysql.Driver";
        String url = "jdbc:mysql://localhost/studio";
        String username = "root";
        String password = " ";

        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

    /*public static Connection getOracleConnection() throws Exception {
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:databaseName";
    String username = "username";
    String password = "password";

    Class.forName(driver); // load Oracle driver
    Connection conn = DriverManager.getConnection(url, username, password);
    return conn;
    }*/
}
3
  • 2
    You give us a piece of code and tell us, "there's no errors in this code". What sort of a question is that? Commented Jan 31, 2011 at 8:20
  • If there's no errors, what's the problem (And give use specifics - don't say "it doesn't work")? Commented Jan 31, 2011 at 8:43
  • Oh boy! he came , he posted, and then he never,never cared ... :P Commented Apr 1, 2014 at 19:32

3 Answers 3

4

You need to tell the user's browser that the content is an image:

response.setContentType("image/jpg")

Otherwise the browser will attempt to display the bytestream as text. But since you don't specify which "Error" you are getting, I can't help any further at this point in time.

Sign up to request clarification or add additional context in comments.

Comments

0

Well, you dont need to use Blob.inputStream, you could just write image binary data to outputstream as shown below ;

out.write(photo,0,photo.length);

instead of ;

 InputStream in = photo.getBinaryStream();             
int length = (int) photo.length();              
int bufferSize = 1024;             
byte[] buffer = new byte[bufferSize];              
while ((length = in.read(buffer)) != -1) {                
 System.out.println("writing " + length + " bytes");                 
out.write(buffer, 0, length);             
}              
in.close(); 

Comments

0

The error is in out.write(photo,0,photo.length);

The method write(char[], int, int) in the type PrintWriter is not applicable for the arguments (Blob, int, long)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.