Подключение к серверу Tomcat с MySQL в JSP - PullRequest
0 голосов
/ 14 января 2011

Так что я пытаюсь заставить работать некоторый учебный код, и я застрял. У меня есть веб-приложение в Eclipse, которое состоит из файла DBConnector.java, сервера Tomcat 6 (локального) и короткого сценария JSP:

package com.atj.db;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;


public class DBConnector {
private static DBConnector connector_ = null;

public static DBConnector getInstance() throws Exception {
    if (connector_ == null) {
        connector_ = new DBConnector();
    }
    return connector_;
}

public Connection getConnection() throws Exception {
    // Get DataSource
    Context ctx = new InitialContext();
    DataSource ds = (DataSource) ctx
            .lookup("java:comp/env/jdbc/mydatabase");
    Connection c = ds.getConnection();
    return c;
}

public String getFirstName() throws Exception {
    String first = "";
    try {
        Connection con = getConnection();
        Statement st = con.createStatement();
        ResultSet res = st.executeQuery("SELECT * FROM employees");
        while (res.next()) {
            first = res.getString("first");
            System.out.println(first);
        }
        con.close();
    } catch (SQLException s) {
        System.out.println("SQL code does not execute.");
    }
    return first;
}
}

Я пытаюсь опубликовать JSP, но StackOverflow анализирует мой HTML ... argh.. сорри .. как мне избежать этого? Вот учебный код:

http://jspjdbc.blogspot.com/

Это очень короткий JSP-скрипт с двумя основными строками:

DBConnector dbConn = DBConnector.getInstance();
String name = dbConn.getFirstName(); <---error line

В любом случае, когда я открываю это в браузере, он выводит «SQL Code not execute» на консоль. Я вижу, что это происходит, когда выбрасывается исключение SQLException. Я отладил это до этой строки в getConnection:

DataSource ds = (DataSource) ctx
        .lookup("java:comp/env/jdbc/mydatabase");

После выполнения этой строки ctx заполняется в основном нулевыми значениями (кроме id)

А затем эта строка:

Connection c = ds.getConnection();

выдает исключение SQLE, и управление немедленно передается блоку catch.

Кроме того, Eclipse выдает мне предупреждение об этом импорте, говоря: «Тип DataSource недоступен из-за ограничения на необходимую библиотеку /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/ classes.jar

import javax.sql.DataSource; //<---Eclipse is complaining about this line, but still compiling

Вот дерево проекта:

project
  Java Resources: src
    com.atj.project
      DBConnector.java
    Libraries
      EAR Libraries
    JRE System Library
    Web App Libraries
      mysql-connector-java-5.1.14-bin.jar
  Web Content
    META-INF
      content.xml
      MANIFEST.MF
    Web-INF
      lib
        mysql-connector-java-5.1.14-bin.jar
      web.xml
    db.jsp
Servers
  Tomcat v6.0 server at localhost-config
    catalina.policy
    catalina.properties
    content.xml
    server.xml
    tomcat-users.xml
    web.xml

Любая помощь очень ценится.

Edit-вот мои файлы .xml

content.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- Specify a JDBC datasource -->
<Resource name="jdbc/mydatabase"
auth="Container"
type="javax.sql.DataSource"
username="demo"
password="demo"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://www.coincan.net:3306/demo?autoReconnect=true"
validationQuery="select 1"
maxActive="2"
maxIdle="1"/>
</Context>

(новый) web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"     "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
    <display-name>db</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <resource-ref>
      <description>mydatabase</description>
      <res-ref-name>jdbc/mydatabase</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>

1 Ответ

1 голос
/ 14 января 2011

Я думаю, что вы все еще довольно далеко.

Вы не говорите, если у вас есть файл META-INF / context.xml для настройки пула источников данных в Tomcat; тебе нужен один.

Вы не говорите, объявляете ли вы источник данных в своем web.xml; ты должен.

Посмотри, не разбираются ли они с тобой.

Вы также можете прочитать это . Я думаю, что имя JNDI должно быть "jdbc / mydatabase".

Вы, конечно, неправильно закрываете свои ресурсы в своем методе; вы вообще не закрываете ResultSet, и вы должны закрыть все в блоке finally.

Добавьте это в конец вашего web.xml:

   <resource-ref>
      <description>mydatabase</description>
      <res-ref-name>jdbc/mydatabase</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
   </resource-ref>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...