0

イメージを PostgreSQL データベースにアップロードできる JSP Web アプリを作成しようとしています。これを目安に進めていたのですが、DBに画像がアップロードされず、メソッド(下記)がcatchに入ります。

これまでの私のコードは次のとおりです。

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 に答える