2017-04-04 16 views
0

データベースからユーザ情報を挿入して表示するJavaサーブレットを作成しました。私はすべてのユーザーに写真を挿入しています。私は写真のためにバイト配列を表示する場合、問題はそれだけで例えばバイトで最初に表示される:[B 43809cd3Java ServletはJava DBにユーザ情報を格納します

private void doAddUser(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    InputStream inputStream = null; 
    Part filePart = request.getPart("image"); 
     if (filePart != null) { 
      // prints out some information for debugging 
      System.out.println(filePart.getName()); 
      System.out.println(filePart.getSize()); 
      System.out.println(filePart.getContentType()); 
      // obtains input stream of the upload file 
      inputStream = filePart.getInputStream(); 
     } 

    String message = null;    
    try { 
     // Register JDBC driver 
     Class.forName("org.apache.derby.jdbc.ClientDriver"); 
     // Open a connection 
     Connection conn = DriverManager.getConnection("jdbc:derby://127.0.0.1:1527/tutoriumDB", "db", "db");   
     // Execute SQL query 
     PreparedStatement st= conn.prepareStatement("insert into users(ID,NAME,LAT,LONG,IMAGE) values(?,?,?,?,?)");         
     st.setString(1, request.getParameter("id1")); 
     st.setString(2, request.getParameter("name")); 
     st.setString(3, request.getParameter("lat")); 
     st.setString(4, request.getParameter("long")); 
     if (inputStream != null) {    
       //st.setBlob(5, inputStream); 
       st.setBinaryStream(5, inputStream, (int)filePart.getSize()); 
     } 
     int row = st.executeUpdate(); 
     if (row > 0) { 
      message = "File uploaded and saved into database"; 
     } 

     st.close(); 
     conn.close(); 

     try (PrintWriter out = response.getWriter()) { 
       out.println("Der Benutzer mit der ID: " +request.getParameter("id1")+" und Name: " + 
        request.getParameter("name")+" wurde eingefuegt"); 
     } 
    } catch (ClassNotFoundException | SQLException ex) { 
     Logger.getLogger(TutServlet.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    // sets the message in request scope 
    request.setAttribute("Message", message); 
    // forwards to the message page 
    getServletContext().getRequestDispatcher("/submit.jsp").forward(
      request, response); 
} 

private void getAllUsers(HttpServletRequest request, HttpServletResponse response) throws IOException 
{ 

    try { 
     // Register JDBC driver 
     Class.forName("org.apache.derby.jdbc.ClientDriver"); 

     // Open a connection 
     Connection conn = DriverManager.getConnection("jdbc:derby://127.0.0.1:1527/tutoriumDB", "db", "db"); 

     // Execute SQL query 
     String sql = "SELECT * FROM users order by ID"; 
     Statement stmt = conn.createStatement(); 

     ResultSet rs = stmt.executeQuery(sql); 
     byte[] imgData = null ; 
     ArrayList<String> users = new ArrayList<String>(); 
     while (rs.next()) { 
      int id = rs.getInt("id"); 
      String name = rs.getString("name"); 
      double lat = rs.getDouble("lat"); 
      double longit = rs.getDouble("long"); 
      byte[] bytes = rs.getBytes("image");    
      users.add(id + ", " + name+ ", " +lat+ ", " +longit+ ", " +bytes); 
     } 

     stmt.close(); 
     conn.close(); 

     try (PrintWriter out = response.getWriter()) { 
      for (String s : users) 
      { 
       out.println(s); 
      } 
     } 
    } catch (ClassNotFoundException | SQLException ex) { 
     Logger.getLogger(TutServlet.class.getName()).log(Level.SEVERE, null, ex); 
    } 


} 

Result of getAllUser

+0

これらは「最初のバイト」ではない、バイト配列の標準の「toString」表現です。 –

+0

配列全体を表示する方法はありますか? –

答えて

0

は、[OK]を私はあなたのコードをanalizeや画像を見てチェックしてみましょう@

byte[] bytes = rs.getBytes("image");  
:あなたはバイトと呼ばれるVARを見ることができるようにあなたが

users.add(id + ", " + name+ ", " +lat+ ", " +longit+ ", " +bytes); 

を使用しているため、画像が正確であることはこれです

[B @ 43809cd3はなぜですか?メソッドtoStringがbyteでオーバーライドされていないためです。

あなたは何をすることができますか?あなたのバイトがnullでない場合、それを反復処理し、このようなあなた自身を作る:

byte[] bytes = new byte[2]; 
bytes[0] = 1; 
bytes[1] = 127; 

System.out.println(bytes); 
StringBuilder byteAppender = new StringBuilder(""); 
if(null != bytes){ 
    for(byte b: bytes){ 
     byteAppender.append(b); 
    } 
    System.out.println("Ok bites are " +byteAppender); 
} 

だから今はバイトではなくbyteAppender入れますので、これは以下のようになります。

users.add(id + ", " + name+ ", " +lat+ ", " +longit+ ", " +byteAppender); 

だからあなたcoudeは次のようになる可能性この:how to convert byte array to string and vice versa

は彼にそれを願っています:

private void getAllUsers(HttpServletRequest request, HttpServletResponse response) throws IOException 
    { 

     try { 
      // Register JDBC driver 
      Class.forName("org.apache.derby.jdbc.ClientDriver"); 

      // Open a connection 
      Connection conn = DriverManager.getConnection("jdbc:derby://127.0.0.1:1527/tutoriumDB", "db", "db"); 

      // Execute SQL query 
      String sql = "SELECT * FROM users order by ID"; 
      Statement stmt = conn.createStatement(); 

      ResultSet rs = stmt.executeQuery(sql); 
      byte[] imgData = null ; 
      ArrayList<String> users = new ArrayList<String>(); 
      StringBuilder byteAppender = new StringBuilder(""); //here is the String you will make 
      while (rs.next()) { 
       int id = rs.getInt("id"); 
       String name = rs.getString("name"); 
       double lat = rs.getDouble("lat"); 
       double longit = rs.getDouble("long"); 
       byte[] bytes = rs.getBytes("image");  
       if(null != bytes){ //you ask the object is not null 
        for(byte b: bytes){ //you itarete it 
         byteAppender.append(b); //you add it 
        } 
       } 
       users.add(id + ", " + name+ ", " +lat+ ", " +longit+ ", " +byteAppender); //you put it 
       byteAppender.setLength(0); //you restart it 
      } 

      stmt.close(); 
      conn.close(); 

      try (PrintWriter out = response.getWriter()) { 
       for (String s : users) 
       { 
        out.println(s); 
       } 
      } 
     } catch (ClassNotFoundException | SQLException ex) { 
      Logger.getLogger(TutServlet.class.getName()).log(Level.SEVERE, null, ex); 
     } 


    } 

また、あなたがこれを読むことができますあなた。

Cya

+0

あなたの答えに感謝しますが、今のようなものが表示されます:-119807871131026100001373726882000-128000-12886000-616297-530066-5573686584120 .....これは最初のバイト配列ではありません –

+0

あなた自身の反復を作るか、私はちょうど例を作りました;)私は実際のものがどのように見え、バイト[]がそれをどう保存しているのかわかりません...ごめんなさい=) – Yussef

関連する問題