使用Java将图像上传到PostgreSQL

时间:2013-10-07 11:43:43

标签: java sql jsp postgresql jdbc

我正在尝试编写一个允许将图像上传到PostgreSQL数据库的JSP Web应用程序。我正在关注this作为指南,但图片未上传到数据库,方法(如下)进入了捕获。

到目前为止,这是我的代码:

public boolean upIm() {
    try {
        File file = new File("bg.jpg");
        FileInputStream fis = new FileInputStream(file);
        PreparedStatement ps = con.prepareStatement("INSERT INTO images VALUES (?, ?)");
        ps.setString(1, "background");
        ps.setBinaryStream(2, fis, (int) file.length());
        ps.executeUpdate();
        ps.close();
        fis.close();

        return true;
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
}

FileInputStream似乎有问题,因为转到db的语句是INSERT INTO images VALUES ('background', ?),我测试了file.length(),它运行正常。

就是这样;如果您需要更多信息或更多代码,请告诉我。

编辑:我得到这个堆栈跟踪:

org.postgresql.util.PSQLException: ERROR: relation "images" does not exist
   Position: 13
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:363)
at bd.provaImg.upIm(provaImg.java:50)
at bd.prova2.main(prova2.java:14)

我认为位置13是类中的行(此处未显示),它只是实例中存在此方法的类。

3 个答案:

答案 0 :(得分:2)

这是你的错误。在黑板上写下1000次我不会再这样做了!

// BAD BAD BAD BAD BAD BAD BAD
} catch (Exception e) {
  return false;
}

这将更近一步,但仍然糟糕

// BAD BAD BAD BAD BAD BAD BAD
} catch (Exception e) {
  //NEVER do this. It hides the stacktrace, the main point of logging an error...
  System.err.println(e.getMessage());
  return false;
}

正确:

} catch (Exception e) {
  e.printStackTrace();
  return false;
}

甚至更好,使用合适的记录器:

} catch (Exception e) {
  //notice the ",e"! 99.999999% you have to log with full stacktrace!
  LOG.error("Unexpected error during file upload", e);
  return false;
}

你吞下了这个错误。这是不好的。非常非常糟糕。这样的代码可以解雇......

现在:

  • 请发布完整的堆栈跟踪
  • 标记错误行

答案 1 :(得分:0)

堆栈跟踪表明找不到表“images”。一些可能性:
1)“图像”不是正确的表名;表格是用引号创建的 2)你需要在你的设置文件中指定数据库模式 - 在你的查询中(我会先尝试这个) 3)设置文件中的其他内容不正确

另外,看看这些帖子:
- Java SQL "ERROR: Relation "Table_Name" does not exist"
- PSQLException: ERROR: relation "TABLE_NAME" does not exist

答案 2 :(得分:-1)

数据库家伙在这里。这对于课堂作业来说是可以接受的,但是如果您将图像存储在数据库中以供具有少数用户的真实应用程序使用,您很可能会抱歉并且您的数据库速度很慢。首选模式是将文件路径存储在数据库中,但不存储图像文件。