2014-12-03 2 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) _don't_ использовать произвольные строки в вашем запросе. Вместо этого используйте параметры ('где ID =? И que_id =?' + 'Ps.setString (1, id); ps.setString (2, queId); ') –

+0

Является ли это моей проблемой? – suneel

+0

Не используйте javascript для показа ваших изображений, javascript работает очень медленно. –

ответ

2

Проблема заключается в том, что вы используете индивидуальный запрос для извлечения каждого изображения из db. Это делает сетевые издержки. Вы можете попробовать многие из описанных здесь решений, чтобы изменить свой код, чтобы сделать один запрос вместо многих. См., Как Batching Select Statements in JDBC.

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

вам не нужно que_id если ID является первичным ключом в таблице.

1

Мое предложение касается получения изображений сначала и сохранения их как чистого файла (темп) в доступной и общедоступной папке вашего приложения, а затем просто укажите их с помощью простого ресурса изображения, используя тег img.
Процесс будет таким.
1. Запросить изображения и сохранить их под /a_public_folder/images/..., которые будут отображаться в каждом виде изображений 1.jpeg, 2.jpeg где 1 и 2 являются идентификаторами (уникальными).
2. держать идентификаторы, извлеченные из базы данных с помощью простого контекста, такого как list_id:List<Long>
3. окончательного сервлет будет иметь следующий вид

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

4. вы также можете применить фильтр для /a_public_folder/images/* пути для того, чтобы просто разрешить пользователям, у которых есть разрешение на просмотр контента/изображений
5. имеют прослушиватель сеанса, чтобы удалить связанные (полученные) изображения в конкретный сеанс пользователя или иметь поток демона для очистки каталога (изображения больше не содержат ссылок) интервал.

Но я предлагаю извлечь изображения из базы данных в простой чистый файл и просто сохранить путь изображений в базе данных.