0

我正在尝试编写一个允许将图像上传到 PostgreSQL 数据库的 JSP Web 应用程序。我按照这个作为指导,但是图像没有上传到数据库并且方法(下面)进入了捕获。

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

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 是类中的行(此处未显示),它只是实例化了包含此方法的类。

4

3 回答 3

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;
}

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

现在:

  • 请发布您获得的完整堆栈跟踪
  • 标记错误所在的行
于 2013-10-07T11:51:13.713 回答
0

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

另外,看看这些帖子:
- Java SQL“错误:关系“表名”不存在”
- PSQLException:错误:关系“表名”不存在

于 2013-10-07T12:24:22.110 回答
-1

数据库人在这里。这对于课堂作业是可以接受的,但是如果您将图像存储在数据库中以用于具有多个用户的实际应用程序,您很可能会感到抱歉,并且您的数据库会很慢。首选模式是将文件路径存储在数据库中,但不存储图像文件。

于 2013-10-07T11:57:18.120 回答