You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2002/03/31 00:00:57 UTC
DO NOT REPLY [Bug 7637] New: -
Tomcat terminates after connecting to a database
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7637>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7637
Tomcat terminates after connecting to a database
Summary: Tomcat terminates after connecting to a database
Product: Tomcat 3
Version: 3.3.1 Final
Platform: PC
OS/Version: Windows NT/2K
Status: NEW
Severity: Critical
Priority: Other
Component: Webapps
AssignedTo: tomcat-dev@jakarta.apache.org
ReportedBy: paults@powerup.com.au
I am running Win2K with SP2 applied and the latest version of MDAC (2.7). When
I run a test page that connects to a database, does a query and outputs the
results, the page is displayed with the correct results but I then receive the
message "The instruction at '0x1f9c6bce' referenced memory at '0x1f9c6bce'. The
memory could not be 'read' (This is a java.exe application error). Following
this Tomcat terminates. Exactly the same code can be put into a java class and
run from command line without any problems. If the class is called from a JSP
run by Tomcat, the same error occurs.
Database:SQLServer2000 and Access2000
Microsoft standard ODBC drivers used
SQLSRV32.DLL Version 2000.81.7713.00
ODBCJT32.DLL Version 4.00.6019.00
All MDAC components have been tested using the Microsoft ComCheck.exe component
checker. All tested as being OK with no conflicts.
Browser is Microsoft IE6.0
Have been using JDK1.2.2 to allow jk_nt_service.exe to work correctly but same
issue occurs with JDK1.4.
Eventviewer does not give any other information than the above error.
The following is tha java class that does the connection and queries:
import java.sql.*;
public class FruitConnect {
private Driver drv = null;
private Connection conn = null;
private ResultSet rs = null;
private Statement stmt = null;
public FruitConnect(){}
public void dbConnect() throws Exception{
drv = (Driver) Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance
();
conn = DriverManager.getConnection
("jdbc:odbc:Fruit","fruit_login","fruit_login");
}
public boolean getNextItem() throws Exception{
boolean ret = rs.next();
return(ret);
}
public String getItemNameString(String columnName) throws Exception{
String name = rs.getString(columnName);
return(name);
}
public float getItemNameFloat(String columnName) throws Exception{
float name = rs.getFloat(columnName);
return(name);
}
public boolean selectFruits() throws Exception{
String query = "SELECT Id, Name FROM Fruit";
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
boolean ret = false;
if (rs != null)
ret = true;
return(ret);
}
public boolean selectMonths() throws Exception{
String query = "SELECT Id, Name FROM Month";
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
boolean ret = false;
if (rs != null)
ret = true;
return(ret);
}
public boolean selectFruitForSale() throws Exception{
String query = "SELECT F.Name AS Fruit, M.Name AS Month, Price, Weight,
(Price * Weight) AS TotalPrice FROM FruitMonth AS FM, Fruit AS F, Month AS M
WHERE FM.FruitId = F.Id AND FM.MonthId = M.Id ORDER BY M.Id";
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
boolean ret = false;
if (rs != null)
ret = true;
return(ret);
}
public int insertFruit(String name) throws Exception{
String query = "INSERT INTO Fruit (Name) VALUES ('" + name + "')";
stmt = conn.createStatement();
int ret = stmt.executeUpdate(query);
return(ret);
}
public int insertFruitForSale(String insertValues) throws Exception{
String query = "INSERT INTO FruitMonth (FruitId, MonthId, Price, Weight)
VALUES (" + insertValues + ")";
stmt = conn.createStatement();
int ret = stmt.executeUpdate(query);
return(ret);
}
public int deleteFruit(String fruitList) throws Exception{
String query = "DELETE FROM Fruit WHERE Name IN (" + fruitList + ")";
stmt = conn.createStatement();
int ret = stmt.executeUpdate(query);
return(ret);
}
public void dbDisconnect() throws Exception{
stmt.close();
conn.close();
}
}
The following is the JSP that calls the class:
<%@ page import="java.sql.*" %>
<jsp:include page="adminHeader.html" flush="true" />
<div align="center">
<table border="1" cellspacing="2" cellspacing="2" width="150">
<tr>
<th>Fruit</th>
</tr>
<% FruitConnect fruitConnect = new FruitConnect(); %>
<%
int counter = 0;
String bgColor = "";
String mode = request.getParameter("mode");
if ( mode == null )
mode = "view";
fruitConnect.dbConnect();
if (fruitConnect.selectFruits()) {
while (fruitConnect.getNextItem()) {
//alternate the background color of the rows for readability
if ((counter % 2) == 0){
bgColor = "#6464FF";
} else {
bgColor = "#FFFFFF";
}
String fruitName = fruitConnect.getItemNameString("Name");
%>
<form method="post" action="delFruit.jsp">
<tr bgcolor="<%= bgColor %>">
<td align="left">
<% if (mode.equals("delete")) {%>
<input type="checkbox" name="delFruit" value="<%=fruitName %>">
<% } %>
<%= fruitName %>
</td>
</tr>
<%
counter = counter + 1;
}
if (mode.equals("delete")) {
%>
<tr>
<td><input type="submit" name="submit" value="Delete Checked
Fruit"></td>
</tr>
<%
}
}
fruitConnect.dbDisconnect();
%>
</form>
</table>
</div>
<jsp:include page="adminFooter.html" flush="true" />
The same class can be called from command line without problem using a simple
stub.
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>