Я новичок в Java EE, особенно с пулами соединений (которые я даже не начинаю понимать правильно). Я попытался создать базовый ресурс JDBC с NetBeans, с помощью нового >> ресурса JDBC. Он создал следующий GlassFish-resources.xml:Использование ресурса и сервлета JDBC от Netbeans
<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>
После этого я повторно старый сервлет "MiServlet", который находится в пакете по умолчанию. Этот сервлет использовался для работы некоторое время назад с типичными практиками начала работы с сервлетами, но теперь он просто не отправит никакого ответа. Я настроил его в 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>
Это метод сервлета 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);
}
}
Этот простой тест должен отображаться все первый столбец пользователя с моего сервера WAMP MySQL на этом же компьютере, используя ресурс JDBC, который я ранее создал с помощью мастера NetBeans. Но все это я получаю, это пустой HTML-страницы, с не даже статического контента, записанного в сервлет (который показывает, что это даже не вызывался):
я вызываю в
... и я получаю:
<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: El esquema 'PRUEBASBD' нет Existe. (схема PRUEBASBD не существует)
, если я указываю его к столу «Персона» (так как я уже выбрали эту схему в GlassFish-resources.xml, как показано ранее):
Grave : java.sql.SQLSyntaxErrorException: La tabla/vista 'PERSONA' no existe. (Таблица/вид PERSONA не существует)
Благодарим за помощь! Но это все еще не работает :(, проверьте это исключение: «Реклама: StandardWrapperValve [JdbcServlet]: Servlet.service() для сервлета JdbcServlet выбрала исключение java.lang.NullPointerException \t в JdbcServlet.doGet (JdbcServlet.java:51)" Кажется, что объект «пул» не инициализируется по методу «init». – Zerok
Лучше опубликуйте свое исключение на ваш вопрос, пожалуйста;) –
Мне удалось заставить его работать! Но он по-прежнему вызывает ошибки, такие как «Таблица PERSONA» не найдена (да, имя моей таблицы «persona», проверено). Это не работает, если я раньше использовал db-схему «pruebasbd». Позвольте мне уточнить вопрос. – Zerok