Так что я пытаюсь заставить работать некоторый учебный код, и я застрял. У меня есть веб-приложение в 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>