java servlet连数据库的问题,麻烦大神们指点一下

haruna1 2016-05-30 10:11:28
这是数据库连接类

package com.CRM.Teller.Util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.CRM.Bean.Nodes;
/**
* 和数据库连接
**/
public class DBConnection {
private static Connection conn = null;

/*
* 一个取得连接的静态方法
*/
public static Connection getConnection() {
try {
// 加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 创建连接
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "SCOTT", "tiger");
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}

public ArrayList<Nodes> getNodeInfo() {
String sql = "select nodeId ,parentId ,hrefAddress ,nodeName from tree_table order by id ";
PreparedStatement pre = null;
Connection conn = null;
conn = getConnection();
ResultSet rs = null;
System.out.println(conn);
ArrayList<Nodes> list = new ArrayList<Nodes>();
try {
pre = conn.prepareStatement(sql);
rs = pre.executeQuery();
while (rs.next()) {
Nodes node = new Nodes();
node.setHrefAddress(rs.getString("hrefAddress"));
node.setNodeId(rs.getString("nodeId"));
node.setParentId(rs.getString("parentId"));
node.setNodeName(rs.getString("nodeName"));
list.add(node);
}
rs.close();
pre.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
pre = null;
conn = null;
rs = null;
}
return list;
}
}

这里写了方法测试一下,可以连通数据库,然后,servlet调用连接数据库是反而连接不上了,下面是servlet

package com.CRM.Teller.Servlet;

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.CRM.Teller.Util.DBConnection;

public class LoginServlet extends HttpServlet {
private Connection conn = null;
private DBConnection connection = null;
private CallableStatement call = null;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");

try {
conn = DBConnection.getConnection();
if(conn ==null)
{
System.out.println("lianjieshibai------");
}
else{
//里面东西就不贴了
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行报错:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:171)
at com.CRM.Teller.Util.DBConnection.getConnection(DBConnection.java:23)
at com.CRM.Teller.Servlet.LoginServlet.doPost(LoginServlet.java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:861)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1584)
at java.lang.Thread.run(Thread.java:662)
lianjieshibai------
...全文
435 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjwdemo 2016-06-02
  • 打赏
  • 举报
回复
把jar包放到web-inf里的lib里面
首发机会 2016-06-01
  • 打赏
  • 举报
回复
把jar包放在web-inf/lib里
Intboy 2016-06-01
  • 打赏
  • 举报
回复
引用 16 楼 liang1319875473 的回复:
[quote=引用 15 楼 fengspg 的回复:] 你写的测试是直main方法运行吧,servlet是web调用,你的lib要加到buildpath里面
我加进去启动服务,执行结果还是未连接[/quote] 去你tomcat里面去看,看jar包在你的项目中的lib中没有相关jar包
约定终点 2016-05-31
  • 打赏
  • 举报
回复
楼上正解
牛肉胡辣汤 2016-05-31
  • 打赏
  • 举报
回复
楼主,你jar包没有添加到项目里面去,你没有看那个jar包的logo和别的不一样吗,在ojdbc14.jar包上右键添加进去就ok了
  • 打赏
  • 举报
回复
楼上+1,jar包放错地方了
qq_15915835 2016-05-31
  • 打赏
  • 举报
回复
你的ojdbc没有加到buildpath里面。。。。。。
a380056867 2016-05-31
  • 打赏
  • 举报
回复
我说一个方法,你右键点一下lib里面的数据库jar包,pash 然后有一个add什么的选项, 就是把他添加到src 里面的lIbrary库, 然后把里面重复的删除,
freeboyzx 2016-05-31
  • 打赏
  • 举报
回复
你试试写几行直接连接数据库的代码,不要调用。
haruna1 2016-05-31
  • 打赏
  • 举报
回复
引用 15 楼 fengspg 的回复:
你写的测试是直main方法运行吧,servlet是web调用,你的lib要加到buildpath里面
我加进去启动服务,执行结果还是未连接
Intboy 2016-05-31
  • 打赏
  • 举报
回复
你写的测试是直main方法运行吧,servlet是web调用,你的lib要加到buildpath里面
haruna1 2016-05-31
  • 打赏
  • 举报
回复
引用 7 楼 freeboyzx 的回复:
你试试写几行直接连接数据库的代码,不要调用。
直接在servlet中写连接代码,显示连接失败
haruna1 2016-05-31
  • 打赏
  • 举报
回复
引用 11 楼 q7w8e9r4 的回复:
楼主,你jar包没有添加到项目里面去,你没有看那个jar包的logo和别的不一样吗,在ojdbc14.jar包上右键添加进去就ok了
我加进去了,依旧不行,还是显示失败
haruna1 2016-05-30
  • 打赏
  • 举报
回复
我tomcat用的6.0,你那个我试过了,还是不成功,那个DBConnection类里面直接写main方法调用getConnection方法可以连接数据库,但是在servlet类中调用getConnection,就显示连接失败
阿拉曼无悔 2016-05-30
  • 打赏
  • 举报
回复
或许是Tomcat问题你用的 哪个版本,换ojdbc6.jar 试试
haruna1 2016-05-30
  • 打赏
  • 举报
回复
sorry忘了说了,我用的oracle数据库,用的是ojdbc14.jar
鄙人王道长 2016-05-30
  • 打赏
  • 举报
回复
好像是没导入数据库驱动程序 例如mysql-connector-java-5.1.39.jar
haruna1 2016-05-30
  • 打赏
  • 举报
回复
数据库连接的包已经导入了
运行到数据库连接那不conn已经为空了,后面的要调用数据库的存储过程,所以显示空指针异常
省略的代码:

call = conn.prepareCall("{call Login_Service(?,?,?,?,?)}");
call.setString(1, userName);
call.setString(2, passWord);
call.registerOutParameter(3, oracle.jdbc.OracleTypes.INTEGER);
call.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);
call.registerOutParameter(5, oracle.jdbc.OracleTypes.CURSOR);
call.execute();
int result = call.getInt(3);
String userId = call.getString(4);
ResultSet rs = (ResultSet) call.getObject(5);
List idList = new ArrayList();
List nameList = new ArrayList();
while(rs.next()){
String roleId = rs.getString(1);
idList.add(roleId);
String roleName = rs.getString(2);
nameList.add(roleName);
System.out.println(rs.getString(2));
}
System.out.println("userId:="+userId);
if(result == 1){
HttpSession session = request.getSession();
session.setAttribute("roleId", idList);
session.setAttribute("roleName", nameList);
session.setAttribute("userId", userId);
session.setAttribute("loginName", userName);
if(nameList.size() != 1){
response.sendRedirect("ChooseRole.jsp");
}else{
response.sendRedirect("ViewServlet?Role="+idList.get(0));
}
}
魄魑 2016-05-30
  • 打赏
  • 举报
回复
算了一下LoginServlet的33行,出错,好像正是你省略的地方。 那些该导的包都导了吗? connector什么的

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧