#java #mysql #image #jsp
#java #mysql #изображение #jsp
Вопрос:
Я создал таблицу в базе данных, и у меня проблема с загрузкой изображения из этой базы данных. Тип данных, которые я использовал для img, — blob, у меня хорошее соединение с базой данных, все остальные данные отображаются на моей странице jsp, но изображение не загружается. Тип данных img — .jpg, размеры изображения 250×250 и размер около 14,2 КБ
CREATE TABLE `akcija` (
`idakcija` int(11) NOT NULL AUTO_INCREMENT,
`naziv` varchar(45) NOT NULL,
`cena` varchar(45) DEFAULT NULL,
`img` blob,
PRIMARY KEY (`idakcija`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1
Я загружаю данные, следуя запросу insert:
INSERT INTO `games1`.`akcija` (`naziv`, `cena`,`img`)
VALUES ('TEST','3500', 'C:\Users\mlade\OneDrive\Desktop\New Folder (2)\WebApplication1\web\gallery\ufc4.jpg');
I also tried by right click on field for img and selecting Load Value from File, and then selecting img that I want. And third option that I tried is right click -> open value in editor -> Load image -> Apply -> and Apply on changes
Вот моя страница JSP
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@include file="connection.jsp"%>
<!DOCTYPE html>
<html>
<head>
<%@include file="header.jsp" %>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<div class="container">
<img class="img-fluid " src="https://gifcdn.com/1h64r34cpd6coj0dhl.gif" alt="mailtimers.com">
</div>
<table class="table table-sm">
<thead>
<tr>
<th scope="col">Ime igrice</th>
<th scope="col">Cena</th>
<th scope="col">Slika</th>
</tr>
</thead>
<% String id = request.getParameter("id");
Blob img = null;
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = DriverManager.getConnection(connectionUrl database, userid, password);
statement = connection.createStatement();
String sql = "select * from akcija";
resultSet = statement.executeQuery(sql);
int i = 0;
while (resultSet.next()) {
%>
<tbody>
<tr>
<td><%=resultSet.getString("naziv")%></td>
<td><%=resultSet.getString("Cena")%></td>
<td><img src="<%=resultSet.getBlob("img")%>" width="250" height="250"/></td>
</tr>
</tbody>
<%
i ;
}
} catch (Exception e) {
out.println("Problem");
return;
} finally {
try {
resultSet.close();
statement.close();
connection.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
%>
</table>
</body>
</html>
Данные из столбцов naziv и cena отображаются на странице jsp, но изображение не загружается. См. Рисунок
Вот скриншоты структуры моего проекта. Также скриншоты БД и запроса, которые я использовал для вставки данных в БД
Комментарии:
1. Когда я проверяю веб-страницу, у меня возникает такая ошибка: localhost: 8080/WebApplication1/faces / … 404 (не найден)
2. вы вставляете запрос для вставки строки для изображения или большого двоичного объекта?
3. Я согласен с @Swati в том, что вы вставляете строку вместо самого изображения. Ознакомьтесь с этими руководствами , чтобы узнать, как это сделать. Кстати, другим распространенным способом является сохранение типа данных столбца as
varchar
, а затем вставка пути к изображению в файловой системе (как вы делаете в своем операторе insert). Затем извлеките строку пути (getString
, notgetBlob
) в JSP и поместите ее сimg
тегом.4. @MladenSavic — Вставить
gallery/ufc4.jpg
в БД вместо полного пути из файловой системы. Кроме того, используйтеresultSet.getString("img")
вместоresultSet.getBlob("img")
с<img>
тегом.5. @MladenSavic — Добро пожаловать.