站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题Tomcat连接oracle问题?

Tomcat连接oracle问题?

摘要: Tomcat连接oracle问题?


各位大哥:

三台机器
一、192.168.0.10 安装了oracle 9i数据库
二、192.168.0.11 安装了tomcat
三、192.168.0.12 安装了JBuilder

四、在192.168.0.12访问 http://192.168.0.11:8080 成功访问tomcat的默认主页,说明tomcat安装成功
五、在192.168.0.12使用JBuilder开发了一个网站T1,T1的主页是一个登录界面,读取192.168.0.10中oracle数据库中的表user取得用户名,就在192.168.0.12这台机上运行可以成功取得用户名,说明访问oracle成功.(JDBC安装在c:/jdbc目录中)

六、编译生成网站T1后,安装到192.168.0.11中,再在其他任何一台可以连接到192.168.0.11的机器输入 http://192.168.0.11:8080/T1 都可以访问到T1的主页,说明网站部署成功, 但 用户名 一项为空,说明不能连接到oracle , 应如何解决?(JDBC安装在192.168.0.11的c:/jdbc目录中,也试过将jdbc目录录制到Tomcat主目录中的common目录中)

谢谢!!!



六、.... 但 用户名 一项为空,说明不能连接到oracle ...

-- 1)检查一下,是否抛出什么错误,如没有正确连接oracle 数据库。
2)是能够执行 sql 文, 但取得的“用户名“为空 ,还是 sql 文没有执行?
3)你是否使用了 数据库连接池 ?



安装Tomcat的机器一定要装oracle客户端吗?


安装Tomcat的机器一定要装oracle客户端吗?
-- 取决于你连接数据库的方式。但Tomcat的机器一定要有jdbc driver


我安装Tomcat的机器确实有JDBC驱动啊,就在c:/jdbc目录中,而且已经加入了CLASSPATH了,还要设置什么呢?也试过复制到common目录(前面的贴已经说明).
--我连接数据库是用thin的方式,按道理应该不用安装oracle客户端的.如下所示:
Class.forName("oracle.jdbc.driver.OracleDriver");
DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.10:1521:ora9i","ora9i","managerora9i");


在连接过程中,是否抛出什么错误?


1)如果没有使用数据库连接池的话, ojdbc14.jar ,nls_charset12.jar,classes12.jar copy 你的项目/web-inf/lib 中
1)如果使用数据库连接池的话,ojdbc14.jar ,nls_charset12.jar,classes12.jar copy tomcate 的 common/lib 中




我今天检查了一下:
--没用数据库连接池
--在部署网站时,web-inf/lib目录中已经自动copy了JDBC驱动

还是读不到数据,没有抛出什么错误啊?


把你访问数据库的代码和sql 文贴上来



<%@ page contentType="text/html; charset=GBK" import="sun.User.UserManager" %>

<head>
<br/>login<br/>
</head>
<body bgcolor="#ffffff">
<form method="post" action="judge.jsp">
<select name="loginname"> <%--这里的loginname要以bean0(User类)中的loginname相同,否则取不到这个值 --%>
<option value="" >--用户登录--</option>
<%=UserManager.getUser()%>
</select>
密码:
<input name="password" type="password"/> <%--这里的password要以bean0(User类)中的password相同,否则取不到这个值 --%>
<input type="submit" name="Submit" value="登录"/>
</form>
</body>




package sun.DB;
import java.sql.*;
//import sun.User.UserManager;

public class DBConnection {
public DBConnection() {
}
public static Connection getConnection() throws SQLException{
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}catch (Exception ex){
ex.printStackTrace();
}
return DriverManager.getConnection

("jdbc:oracle:thin:@192.168.0.10:1521:ora9i","ora9i","managerora9i");
}
public static void main(String args[]){
try{
Connection con=DBConnection.getConnection();
Statement sql=con.createStatement();
String query="select * from testuser";
ResultSet result=sql.executeQuery(query);
while(result.next()){
String name=result.getString("tname");
String pwd=result.getString("tpassword");
System.out.println(""+name+" "+pwd);
}
sql.close();
con.close();
// String suser=UserManager.getUser();
// System.out.println(suser);
}catch (Exception e){
System.err.print("ClassNotFoundException:");
System.err.println(e.getMessage());
}
}
}



package sun.User;
import java.sql.*;
import sun.DB.*;


public class UserManager {
public UserManager() {
}
public static String getUser(){
Connection conn=null;
StringBuffer buf=new StringBuffer();
try{
conn=DBConnection.getConnection();
PreparedStatement stat=conn.prepareStatement("select tloginname,tname from

testuser");
ResultSet rs=stat.executeQuery();
/*
while (rs.next()){
String temp="<option value='"+rs.getString("tloginname")+"'>"+rs.getString

("tname")+"</option>/n";
buf.append(temp);
}
*/
//
while (rs.next()) {
// 将数据读出,并作为列表的选项;
String temp = "<option value='" + rs.getString("tloginname") + "'>" +
rs.getString("tname") + "</option>/n";
buf.append(temp);
}

//
//System.out.println("tloginname="+buf);
return buf.toString();

}catch(SQLException ex){
ex.printStackTrace();
return "";
}finally{
try{
if (conn!=null) {
conn.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}



1)代码没什么问题,看看能否跟踪执行,或打印信息
Connection con=DBConnection.getConnection();
System.out.println("this is getConnection");
Statement sql=con.createStatement();
System.out.println("this is createStatement");
String query="select * from testuser";
ResultSet result=sql.executeQuery(query);
System.out.println("this is getQuery");
while(result.next()){
String name=result.getString("tname");
String pwd=result.getString("tpassword");
System.out.println(""+name+" "+pwd);
2)如果 System.out.println("this is get Connection") 等3个print 都打印出来了,

String query="select * from testuser";
String query="select count(*) from testuser";
String query="select * from tab";



我用JBuilder2006开发的,在JBuilder中调试,运行完全正常啊?
部署到Tomcat服务器后就不正常啦,我应该如何进行你上述的调试?


tomcat 启动后, 可以看到 System.out.println


看不到 System.out.println


在哪里看?在网页中看不到


tomcat 控制台 可以看 System.out.println



我对Tomcat不熟悉,如何进入控制台?


1)tomcat/bin/start.bat 启动后,就进入控制台了
2)tomcat/logs 也可以查看错误信息


start.bat我找不到
检查了stdout_20060925.log,应该是连接不了数据库,出错信息如下:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at chapter15.DB.DBConnection.getConnection(DBConnection.java:10)
at chapter15.User.UserManager.getUser(UserManager.java:13)
at org.apache.jsp.login_jsp._jspService(login_jsp.java:55)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:545)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at chapter15.DB.DBConnection.getConnection(DBConnection.java:15)
at chapter15.User.UserManager.getUser(UserManager.java:13)
at org.apache.jsp.login_jsp._jspService(login_jsp.java:55)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)



应该是JDBC的设置问题?是否真的要装oracle客户端?


原因是驱动没找到:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

ojdbc14.jar ,nls_charset12.jar,classes12.jar 拷贝到你的项目/web-inf/lib 中 ?



我将JBuilder生成的.war文件复制到webapps目录后,Tomcat就在web-inf/lib目录自动生成了有我的驱动,不过是一个zip文件;classes12.zip


classes12.zip classes12.jar


原因是驱动没找到:java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

ojdbc14.jar ,nls_charset12.jar,classes12.jar 拷贝到你的项目/web-inf/lib 中 ?

顶起

加入/web-inf/lib 中之后


应该是包的事

给你个例子:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@服务器ip:端口:数据库的SID ";
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from 表名";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
第一个字段内容为:<%=rs.getString(1)%>
第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>


还是不行.
classes12.zip classes12.jar 这行的意思是将class12.zip改名为classes12.jar?


你收短消息。
classes12.zip classes12.jar 这行的意思是将使用classes12.jar?
这2个 ojdbc14.jar ,nls_charset12.jar 也进去看看



收不到短消息


hi!问题终于解决!
问题的主要原因是:jdbc的驱动版本问题!
classes12.zip是从oracle的官方网站下载的,为何不行,原因未知.
从oracle的安装目录的/jdbc/lib复制驱动到应用的lib目录下,问题解决!

非常多谢 lianhg !!!! 的帮忙
还有nina36633640


恭喜


↑返回目录
前一篇: java错误抛出如何去看?怎么看错误信息??
后一篇: 第一次用java作开发,写了一个servlet,但是输出来是消息,中文是问号?