2016-11-27 12 views
0

私は、サーブレットが1つしかない単純なWebプロジェクトの接続プーリングを実装しようとしています。しかし何らかの理由で、私はJdbcSQLExceptionを取得しています。エラー:[stderr](デフォルトタスク-4)テーブル "EMP"が見つかりませんでした。 Wildflyで接続プールを設定するのは初めてです。私はまだこの問題を解決する方法を見つけることができないいくつかの再調査の後に。 Intelijプロジェクトでsomethigが正しく設定されていない可能性があります。 Iは、以下の工程を行った:WildflyのPostgreSQL接続プール。 JdbcSQLExceptionを取得する

  • はWildflyにJDBCドライバ(PostgreSQLの-9.4-1201.jdbc4.jar)をデプロイ。
  • JDBCデータソース(名前:PostgresDS、JNDI:java:/ PostgresDS)を構成しました。
  • Wildflyの接続(接続URL:jdbc:postgresql:// localhost:5433/sample_db)をテストしました。
  • データベースPostgresDSに正常に接続しました。 IntelliJプロジェクトで

  • データソースデータベースに正常に接続されている(また名前のPostgresDS)、作成した(URLます。jdbc:postgresqlの:// localhostを:5433/sample_dbを)。

しかし、サーブレットを実行しようとすると、JdbcSQLExceptionが発生します。

[2016-11-27 06:03:38,447] Artifact employees-jsp:war exploded: Artifact is deployed successfully 
[2016-11-27 06:03:38,447] Artifact employees-jsp:war exploded: Deploy took 1 619 milliseconds 
18:03:45,222 ERROR [stderr] (default task-4) org.h2.jdbc.JdbcSQLException: Таблица "EMP" не найдена 
18:03:45,222 ERROR [stderr] (default task-4) Table "EMP" not found; SQL statement: 
18:03:45,223 ERROR [stderr] (default task-4) SELECT * FROM emp [42102-173] 

私はここで逃したことがありますか?プロジェクトに.xmlファイルを設定する必要はありますか?

私はすべてのヒント、意見、批評に感謝します。私は問題を解決した

@WebServlet(name = "ServletDS", urlPatterns = {"/ServletEmp"}) 
public class ServletDS extends HttpServlet { 
    @Resource(name = "PostgresDS") 
    private DataSource dataSource; 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // Set up the Printwriter 
     PrintWriter out = response.getWriter(); 
     response.setContentType("text/plain"); 

     // Get a connection to the DB 
     Connection myConnection = null; 
     Statement myStatement = null; 
     ResultSet myResultSet = null; 

     try { 
      myConnection = dataSource.getConnection(); 

      // Create a SQL statement 
      String sql = "SELECT * FROM emp"; 
      myStatement = myConnection.createStatement(); 

      // Execute SQL query 
      myResultSet = myStatement.executeQuery(sql); 

      // Process the result set 
      while (myResultSet.next()) { 
       String name = myResultSet.getString("ename"); 
       out.println(name); 
      } 

     } catch (Exception exc) { 
      exc.printStackTrace(); 
     } 

    } 
} 
+0

「*表 『EMP』 *見つからない」私にはかなり明確と思われます。接続するデータベースには 'emp'というテーブル名はありません。これを修正するには、テーブル –

+1

を作成します。postgresql JDBCドライバは、org.h2.jdbc.JdbcSQLException型の例外をスローしません。 H2データベースドライバがそれを行います。構成に問題がある必要があります。例外の完全なスタックトレースを送信すると、いつものように役立ちます。 –

+0

@a_horse_with_no_nameデータベースにテーブルempがない場合は、この質問を投稿しません。そこにあった。 –

答えて

0

:ここ

はサーブレットです。私が見逃していたのは、JNDIを使用してデータソースを検索して接続を取得することでした。ここで私は接続を取得するためにコードを追加したものです:

 InitialContext ctx = new InitialContext(); 
     DataSource dataSource = (DataSource) ctx.lookup("java:/PostgresDS"); 
     myConnection = dataSource.getConnection();