2013-02-15 2 views
3

에 데이터베이스에서 이미지를 표현하기 위해 어떻게 데이터베이스에서 BLOB를 기반으로 JSON을 작성해야합니다. 블롭 이미지를 얻으려면, 내가 JSON 배열에 쇼 아래와 후 코드를 사용는 JSON

Statement s = connection.createStatement(); 
ResultSet r = s.executeQuery("select image from images"); 
while (r.next()) { 
    JSONObject obj = new JSONObject(); 
    obj.put("img", r.getBlob("image")); 
} 

내가 이미지 덩어리를 따라 각 이미지에 대한 JSON 개체를 반환 할 수 있습니다. 그것을 어떻게 성취 할 수 있습니까? JSON에서

+0

궁극적 인 목표는 무엇입니까? HTML 페이지에 ''으로 표시 하시겠습니까? 이미지 식별자가 요청 매개 변수 인 URL을 반환하고 URL이 실제로 요청 된 경우 이미지를 응답으로 반환 할 수 없습니까? – BalusC

+0

BalusC, 각 r.getBlob ("image")에 대한 URL을 생성해야하고 알 수 없습니다. 이것은 json을 통해 모바일 응용 프로그램에서 사용됩니다. –

+0

아, JSON을 통해 이미지를 모바일 장치로 전송 하시겠습니까? 그런 다음 Base64로 인코딩 하시겠습니까? – BalusC

답변

5

바이너리 데이터는 보통 Base64 인코딩 된 형태로 표현하는 것이 가장 좋습니다. 바이트 배열을 Base64 인코딩하려면 표준 Java SE DatatypeConverter#printBase64Binary() 메서드를 사용할 수 있습니다.

byte[] imageBytes = resultSet.getBytes("image"); 
String imageBase64 = DatatypeConverter.printBase64Binary(imageBytes); 
obj.put("img", imageBase64); 

반대쪽에는 Base64 디코드가 있습니다. 예 : 안드로이드에서는 내장 된 android.util.Base64 API를 사용할 수 있습니다.

byte[] imageBytes = Base64.decode(imageBase64, Base64.DEFAULT); 
+0

우수. 고맙습니다, BalusC. ;-) –

+0

당신을 진심으로 환영합니다. – BalusC

+0

작은 데이터로 작업하면 코드는 훌륭하지만 큰 데이터로 작업하며 항상 메모리 부족 현상이 발생합니다. 메모리 부족을 피하기 위해 코드를 최적화하는 방법은 무엇입니까? 일반적으로 이미지를 변환하는 항목은 2000 개입니다. –