2014-12-03 3 views
1

루프를 통해 Oracle 데이터베이스에서 여러 이미지를 가져 오는 시나리오가 있습니다. 그러나 이미지를 가져 와서 브라우저에 표시하는 데 많은 시간이 걸립니다. 통해,이 코드는 일부 매개 변수를 사용하여 내 메서드를 호출합니다.이미지를 JSP로로드하는 데 많은 시간이 필요합니다.

for(Object[] obj: memberDetails) 
{ 
    System.out.println("String.valueOf(obj[0])"+String.valueOf(obj[0])); 

    try{ 
     memberImage=dtSrvc.getQueImageForQC(Id,String.valueOf(obj[0])); 
    } 
    catch(Exception e) 
    {} 

    map.put("memImage"+count, memberImage); 
    key.add("memImage"+count); 
    hmap.put("memImage"+count, memberImage); 
    count++; 
} 

여기를 통해 내가 이미지

ps = conn.prepareStatement("select photo from member_photo where ID='" 
         + Id + "' and que_id=" + QueId); 

하십시오

, 제가이 과정을 빠르게하는 방법을 알려 주시기를 가져 오는하고 내 쿼리입니다. 네트워크가 느린 경우 모든 이미지를 가져올 수 없습니다. 내 신청서는 현재 많은 사람들이 사용하고 있습니다.

+1

1) 병목 현상에 대해 정말로 회의적입니다. 2) 쿼리에서 임의의 문자열을 사용하지 마십시오. 대신에 매개 변수를 사용하십시오 ('ID =? 및 que_id =?'+'ps.setString (1, id); ps.setString (2, queId);') –

+0

내 문제가 해결 되었습니까? – suneel

+0

이미지를 표시하는 데 자바 스크립트를 사용하지 마십시오. 자바 스크립트가 매우 느립니다. –

답변

2

문제는 개별 쿼리를 사용하여 db에서 각 이미지를 가져 오는 것입니다. 그것은 네트워크 오버 헤드를 만듭니다. 여기에 설명 된 많은 솔루션을 시도해보고 많은 코드 대신 하나의 쿼리 만 수행하도록 코드를 변경할 수 있습니다. Batching Select Statements in JDBC 방법을 참조하십시오. ID이 테이블의 1 차 키인 경우

ps = conn.prepareStatement("select photo from member_photo where ID in (" + inClause.toString() + ')'); 

당신은 que_id 필요하지 않습니다.

1

제안 사항은 이미지를 먼저 가져 와서 응용 프로그램의 액세스 가능하고 공용 폴더에 그대로 유지 한 다음 img 태그를 사용하는 간단한 이미지 리소스로 가리 키도록하는 것입니다.
과정은 이와 같을 것입니다.
1. 이미지를 쿼리하고 각각의 이미지의 이름이 1.jpeg, 2.jpeg/a_public_folder/images/... 아래에 보관하십시오. 여기서 1과 2는 고유합니다 (고유).
2.처럼 될 것 list_id:List<Long>
3. 최종 서블릿과 같은 간단한 문맥 데이터베이스에서 검색 한 ID를 유지 당신은 또한하기 위해 /a_public_folder/images/* 경로에 대한 필터를 적용 할 수

for(long idx:list_id){ 
    out.print("<img src=\"/a_public_folder/images/"+idx+".jpeg\"/>"); 
} 

4. 다음 단지
5.에는 특정 사용자 세션에 연결된 (페치 된) 이미지를 제거하거나 디렉토리를 정리하기위한 데몬 스레드 (이미지에 더 긴 링크가 없음)를 갖기 위해 세션 수신기가 있습니다. 간격.

그러나 데이터베이스에서 이미지를 간단한 순수 파일로 추출하고 이미지 경로를 데이터베이스에 보관하는 것이 좋습니다.

관련 문제