blob 提交到 DB 的错误是什么?
What is the error in blob submission to DB?
我正在尝试在数据库中插入和更新图像,该图像已经是 blob 格式。
public static boolean alterarLogo(int id, Blob logo) {
String sql = "update conta set conta_logo = " + logo + " where conta_id = " + id;
try (Connection conn = ConexaoDBGeral.abre()) {
if (conn != null) {
try (Statement ps = conn.createStatement()) {
ps.executeUpdate(sql);
return true;
}
}
} catch (SQLException ex) {
Logger.getLogger(ContaDAO.class.getName())
.log(Level.SEVERE, null, ex);
}
return false;
}
上面的代码作为异常抛出:"improper qualified name (too many dotted names) :javax.sql.rowset.serialblob"。在 Db 中,相关列的类型为 "oid"。
获取 blob 的代码:
int idEmpresa=-1;
SerialBlob blob = null;
byte[] contents;
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
// Process form file field (input type="file").
String fieldName = item.getFieldName();
String fileName = FilenameUtils.getName(item.getName());
InputStream file = item.getInputStream();
contents = IOUtils.toByteArray(file);
try {
blob = new SerialBlob(contents);
} catch (SQLException ex) {
Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, ex);
}
ContaDAO.alterarLogo(idEmpresa, blob);
}
}
} catch (FileUploadException e) {
我正在使用 Java、Servlet 和 JSP,以及 PostGres。哪里出错了?
仅部分回答。
您正在生成这样的 SQL 语句:
String sql = "update conta set conta_logo = " + logo +
" where conta_id = " + id;
由于 logo
被声明为 Blob
,您将在生成 SQL 时调用 Blob.toString()
。 Blob
的 javadoc 没有指定 toString()
方法的作用,但不太可能将 Blob
呈现为在 SQL 语言中有意义的东西。根据您看到的错误消息,我的猜测是它实际上是使用 Object::toString()
渲染对象,其中将包含您当时使用的 Blob
实例的实际 class 名称.
我正在尝试在数据库中插入和更新图像,该图像已经是 blob 格式。
public static boolean alterarLogo(int id, Blob logo) {
String sql = "update conta set conta_logo = " + logo + " where conta_id = " + id;
try (Connection conn = ConexaoDBGeral.abre()) {
if (conn != null) {
try (Statement ps = conn.createStatement()) {
ps.executeUpdate(sql);
return true;
}
}
} catch (SQLException ex) {
Logger.getLogger(ContaDAO.class.getName())
.log(Level.SEVERE, null, ex);
}
return false;
}
上面的代码作为异常抛出:"improper qualified name (too many dotted names) :javax.sql.rowset.serialblob"。在 Db 中,相关列的类型为 "oid"。
获取 blob 的代码:
int idEmpresa=-1;
SerialBlob blob = null;
byte[] contents;
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (!item.isFormField()) {
// Process form file field (input type="file").
String fieldName = item.getFieldName();
String fileName = FilenameUtils.getName(item.getName());
InputStream file = item.getInputStream();
contents = IOUtils.toByteArray(file);
try {
blob = new SerialBlob(contents);
} catch (SQLException ex) {
Logger.getLogger(Config.class.getName()).log(Level.SEVERE, null, ex);
}
ContaDAO.alterarLogo(idEmpresa, blob);
}
}
} catch (FileUploadException e) {
我正在使用 Java、Servlet 和 JSP,以及 PostGres。哪里出错了?
仅部分回答。
您正在生成这样的 SQL 语句:
String sql = "update conta set conta_logo = " + logo +
" where conta_id = " + id;
由于 logo
被声明为 Blob
,您将在生成 SQL 时调用 Blob.toString()
。 Blob
的 javadoc 没有指定 toString()
方法的作用,但不太可能将 Blob
呈现为在 SQL 语言中有意义的东西。根据您看到的错误消息,我的猜测是它实际上是使用 Object::toString()
渲染对象,其中将包含您当时使用的 Blob
实例的实际 class 名称.