Я использую GWT для загрузки изображения, а затем пытаюсь сохранить его в базе данных.клиентская сторона выбирает изображение, а затем передает его сервлету http, где этот класс пытается вставить его в базу данных.
Он не будет обновлять столбец таблицы с изображением, но я создал тестовый байтовый массив с некоторым текстом, который будет помещен в столбец.
Столбец таблицы равен

Когда я создал столбец, я не указал размер.
Я не публикую код клиента, потому что не думаю, что он будет полезенВот.Поскольку байтовый массив очень хорошо подходит сервлету.
Вот класс сервлетов
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
long maxFileSize = 20480;
long sizeInBytes = 0;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
String entityId = request.getParameter("entityId");
int id = Integer.parseInt(entityId);
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//handling a normal form-field
if(item.isFormField()) {
System.out.println("Got a form field");
String name = item.getFieldName();
String value = item.getString();
System.out.print("Name:"+name+",Value:"+value);
} else {
//handling file loads
System.out.println("Not form field");
String fieldName = item.getFieldName();
String fileName = item.getName();
if (fileName != null) {
fileName = FilenameUtils.getName(fileName);
}
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
sizeInBytes = item.getSize();
byte[] data = item.get();
API.GetAccountManager().saveLogo(id, data);
База данных находится локально, и я нахожусь в среде разработчика.Я могу записать изображение в папку Tomcat, поэтому я знаю, что массив байтов правильный.Размер изображения составляет 10 КБ.размер массива байтов данных 10705
отладка. Я вижу, что изображение сначала сохраняется во временной папке в tomcat.
Вот класс с вызывающим методом.
public void saveLogo(final int accountID, byte[] data){
Statement stmt = null;
Connection connection;
int rowCount;
PreparedStatement pstmt = null;
try {
connection = API.GetConnection();
pstmt = connection.prepareStatement(
"UPDATE account SET LOGO = ? WHERE account.id = ?");
byte[] testBytes = "this is a test".getBytes();
// pstmt.setBytes(1, data);
pstmt.setBinaryStream(1,new ByteArrayInputStream(data),data.length);
// pstmt.setBinaryStream(1,new ByteArrayInputStream(testBytes),testBytes.length);
pstmt.setInt(2, 5);
rowCount = pstmt.executeUpdate();
pstmt.execute();
connection.commit();
}catch (Exception exception) {
exception.printStackTrace();
if (exception instanceof DatabaseException) {
throw (DatabaseException) exception;
}
throw new DatabaseException("There was a problem executing a database call.", exception);
} finally {
if (pstmt != null) {
// pstmt.close();
}
}
}
Этот класс все еще нуждается в работе.Я могу вставить testBytes, но 0 rowCount обновляется данными byte [].
Почему это не работает с реальным изображением, но работает с простым текстом?