Как передать параметр типа image в udf-функцию базы данных H2?
В среде spring вызывается udf-функция imageinsert, которой нужно передать изображение для вставки в таблицу БД H2. функция создаётся, в соответствии с документацией, с помощью скрипта:
CREATE ALIAS imageinsert AS $$
void imageinsert(java.sql.Connection conn,
Integer idimage, String nameimage, Integer sizeimage, byte[] dataimage) throws SQLException {
String sql = "insert into images (idimage, nameimage, sizeimage, dataimage) values(" + idimage + ",'" + nameimage + "'," + sizeimage + "," + dataimage + ")";
conn.createStatement().executeUpdate(sql);
}
$$;
Естественно, при формировании строки sql возникает ошибка. Если устранить данные о двоичном параметре:
CREATE ALIAS imageinsert AS $$
void imageinsert(java.sql.Connection conn,
Integer idimage, String nameimage, Integer sizeimage) throws SQLException {
String sql = "insert into images (idimage, nameimage, sizeimage) values(" + idimage + ",'" + nameimage + "'," + sizeimage + ")";
conn.createStatement().executeUpdate(sql);
}
$$;
то функция вызывается верно.
как правильно передать параметр типа image в udf-функцию базы данных H2 ?
Ответы (1 шт):
Автор решения: Карабас
→ Ссылка
вот работающий код:
CREATE ALIAS imageinsert AS $$
ResultSet imageinsert(java.sql.Connection conn, String nameimage, String descriptimage, Integer sizeimage, byte[] dataimage) throws SQLException {
Integer lastvalue = 0;
java.sql.ResultSet rs = null;
String sql = "select images_sequence.nextval";
rs = conn.createStatement().executeQuery(sql);
while(rs.next()) { lastvalue = rs.getInt(1); }
sql = "insert into images (idimage, nameimage, descriptimage, sizeimage, dataimage)" +
" values( ?, ?, ?, ?, ?)";
java.sql.PreparedStatement pstat = conn.prepareStatement(sql);
pstat.setInt(1, lastvalue);
pstat.setString(2, nameimage);
pstat.setString(3, descriptimage);
pstat.setInt(4, sizeimage);
pstat.setBytes(5, dataimage);
pstat.executeUpdate();
pstat.clearParameters();
sql = "select idimage, nameimage, descriptimage, sizeimage, dataimage" +
" from images where idimage = " + lastvalue;
return conn.createStatement().executeQuery(sql);
}
$$;
особенность выполнения в том, что нужно использовать:
- java.sql.PreparedStatement;
- pstat.executeUpdate();
код возвращает новое значение записи таблицы:
