我是Java EE的新手,尤其是連接池(我甚至沒有正確理解)。我試圖用Netbeans和New >> JDBC Resource創建一個基本的JDBC資源。它創建了以下與GlassFish resources.xml中:使用Netbeans的JDBC資源和servlet
<resources>
<jdbc-resource enabled="true" jndi-name="jdbc/myDB" object-type="user" pool-name="miConnectionPool">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="miConnectionPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="URL" value="jdbc:mysql://localhost:3306/pruebasbd?relaxAutoCommit="true""/>
<property name="User" value="root"/>
<property name="Password" value="root"/>
</jdbc-connection-pool>
</resources>
在此之後,我再用一個老的servlet, 「MiServlet」,這是在默認的包。這個servlet過去常常和Servlet一起開始工作,但現在它不會發送任何響應。我已經在web.xml中配置了它,所以它在URL模式「localhost/myProject/index」處被調用,但沒有顯示。
在這裏,你有XML配置:
<servlet>
<servlet-name>MiServlet</servlet-name>
<servlet-class>MiServlet</servlet-class>
</servlet>
(...)
<servlet-mapping>
<servlet-name>MiServlet</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
這是servlet的processRequest方法現在。我強調了在那裏我試圖用我的新創建的JDBC資源的部分(我嚴重不知道,如果我做錯了或不!):
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
**// Context creation
Context initContext = new InitialContext();
Context webContext = (Context) initContext.lookup("java:/comp/env");
DataSource ds = (DataSource) webContext.lookup("jdbc/myDB");
Connection dbCon = ds.getConnection();**
PreparedStatement ps = dbCon.prepareStatement("SELECT * FROM person");
ResultSet rs = ps.executeQuery();
String res = "BEGINNING\n";
while(rs.next()){
res += rs.getString(1)+"\n";
}
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet MiServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet MiServlet at " + request.getContextPath() + "</h1>");
out.println("<p>"+res+"</p>");
out.println("</body>");
out.println("</html>");
}
} catch (NamingException ex) {
Logger.getLogger(MiServlet.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(MiServlet.class.getName()).log(Level.SEVERE, null, ex);
}
}
這個簡單的測試應該顯示全部使用我以前使用NetBeans嚮導創建的JDBC資源,在同一臺計算機上從我的WAMP MySQL服務器獲取人員的第一列。但我得到的,這是空的HTML頁面,使用甚至沒有寫在servlet(這表明它甚至沒有獲取調用)的靜態內容:
我致電
...我得到:
<html>
<head>
<link rel="alternate stylesheet" type="text/css" href="resource://gre-resources/plaintext.css" title="Ajustar líneas largas">
</head>
<body>
<pre></pre>
</body>
</html>
我在做什麼錯?
編輯:
與M-元帥答案的代碼現在,它管理的連接,但它仍然無法找到任何表或模式。如果我點查詢pruebasbd.persona:
造成的:org.apache.derby.client.am.SqlException:薩爾瓦多esquema 'PRUEBASBD' 沒有existe。 (架構PRUEBASBD不存在)
如果將它指向表「角色」(因爲我已經選擇在GlassFish-resources.xml中該模式如前所示):
格雷夫斯:java.sql.SQLSyntaxErrorException:La tabla/vista'PERSONA'no existe。 (表/視圖PERSONA不存在)
謝謝你的幫忙!但它仍然不工作:(檢查此異常:「Advertencia:StandardWrapperValve [JdbcServlet]:servlet.service()for servlet JdbcServlet拋出異常 java.lang.NullPointerException \t at JdbcServlet.doGet(JdbcServlet.java:51)」看起來「池」對象沒有在「初始化」方法初始化。 – Zerok
更好地發佈你的問題的例外,請;) –
我設法讓它工作!但它仍然會拋出錯誤,如「Table PERSONA」未找到(是的,我的表名是「persona」,檢查它)。如果我之前放置了數據庫模式「pruebasbd」,它也不起作用。讓我更新這個問題。 – Zerok