Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations IamaSherpa on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

JDBC issues with Tomcat, mysql and jconnector 1

Status
Not open for further replies.

knowitnot

Programmer
Jun 7, 2004
15
US
hi i'm running windows xp professional, tomcat 5, mysql 4.X and jconnector 3.012

i am unable to sucessfully execute the following jsp code to test jdbc:

<html>
<head>
<title>DB Test</title>
</head>
<body>
<% TestSQLLoad tst = new TestSQLLoad();
tst.init();
%>
<h2>Results</h2>
User <%=tst.getUser() %> <br/>
Pwd <%=tst.getPassword() %> <br/> ID <%=tst.getID() %>
</body>
</html>

i receive the following ompilation errors when i load up
An error occurred at line: 7 in the jsp file: /test-db.jsp
C:\Tomcat\work\Catalina\localhost\testdb\org\apache\jsp\test_002ddb_jsp.java:51: cannot resolve symbol
symbol : class TestSQLLoad
location: class org.apache.jsp.test_002ddb_jsp
TestSQLLoad tst = new TestSQLLoad();

i've modified the server.xml file to include a new context below my ROOT context.

<Context path="/testdb" docBase="testdb"
debug="5" reloadable="true" crossContext="true">

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>

<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>

<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>5</value>
</parameter>

<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>****</value>
</parameter>
<parameter>
<name>*******</name>
<value>testpwd</value>
</parameter>

<!-- Class name for the old mm.mysql JDBC driver - uncomment this entry and comment next
if you want to use this driver - we recommend using Connector/J though
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
-->

<!-- Class name for the official MySQL Connector/J driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>

<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost/testdb?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>

i've also created a web.xml file for my testdb app...

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"

<web-app xmlns=" xmlns:xsi=" xsi:schemaLocation=" version="2.4">
<web-app>
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

my classpath is set up as follows:

.;c:\tomcat\common\lib\servlet-api.jar;c:\tomcat\common\lib\jsp-api.jar;c:\tomcat\common\lib\tools.jar;c:\tomcat\common\libmysql-connector-java-3.0.12-production-bin.jar;c:\tomcat\common\lib\commons-dbcp-1.1.jar;c:\tomcat\common\lib\commons-collections.jar;c:\tomcat\common\lib\commons-pool-1.1.jar;c:\jsp;..
am i missing something here? any constructive feedback would be greatly appreciated. thanks.
 
The compiler cannot find your class "TestSQLLoad".

Two questions :

Where have you put this class ?
Is it in a package ?
 
TestSQLLoad is located in the classes directory that falls below the WEB-INF directory of my webapp testdb. and no it isnot in a package. i can load and view the directory structure but i can't load the test-db.jsp file.

webapps-
|
|---ROOT
|
|--testdb
|
|---test-db.jsp
|
|
|---web-inf
|
|---- web.xml
|
|---- classes
|
|---TestSQLLoad.class
 
Tomcat does not understand how to load non-packaged classes.

You will need to put your class in a package - eg :

Code:
package test;

public class Test {
	public Test() {
		System.err.println("hello");
	}
}

and then put this class in a directory relating to the package such as this :

WEB-INF/classes/test

When compiling, make sure it is like this (ie from WEB-INF/classes)

javac test\Test.java
 
i tried compiling the source file like this:

javac -d c:\tomcat\webapps\testdb\WEB-INF\classes\test TestSQLLoad.java

but i'm still getting the same error as before. why is the class not loading? any other suggestions would be helpful.

 
btw, i'm not using a bean in my jsp. does that matter?
 
OK,

Put TestSQLLoad.java in c:\tomcat\webapps\testdb\WEB-INF\classes\test

Make sure that TestSQLLoad.java has the first line as "package test;"

cd c:\tomcat\webapps\testdb\WEB-INF\classes
javac test\TestSQLLoad.java

Then in your JSP, add the line at the top of the page as

<%@ page import="test.*" %>

Then it should work ...
 
Thanks for your help with my problem. the extra line of code you suggested corrected the errors i was getting.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top