2016-11-27 35 views
0

我試圖爲只有一個servlet的簡單web項目實現連接池。但出於某種原因,我得到一個JdbcSQLException org.h2.jdbc.JdbcSQLException:錯誤[stderr](默認任務-4)未找到表「EMP」; 這是我第一次在Wildfly中配置連接池。經過一番研究,我仍然無法弄清楚如何解決這個問題。我猜可能somethig在我的Intelij項目中沒有正確配置。 我提出了以下步驟:使用PostgreSQL的Wildfly連接池。獲取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),成功地連接到數據庫(網址爲:jdbc:在PostgreSQL://本地主機:5433/sample_db)。

但是當我試圖運行一個servlet時,會發生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文件嗎?

我會感激所有的提示,意見和批評。

這裏是servlet:

@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

「* Table」EMP「not found *」似乎對我很清楚。在連接到的數據庫中沒有表名「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();