servlet中连接数据库问题: exception java.lang.NullPointerException

HTTPStatus500java.lang.NullPointerExceptiondatabase.DB.GetResulte(DB.java:25)kindsOfS... HTTP Status 500
java.lang.NullPointerException
database.DB.GetResulte(DB.java:25)
kindsOfServlet.selectServlet.doGet(selectServlet.java:45)
kindsOfServlet.selectServlet.doPost(selectServlet.java:85)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

联系代码如下:
package database;
import java.sql.*;
public class DB {
Connection conn=null;
Statement stmt=null;
public DB(){ //连接数据库
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try{
conn=DriverManager.getConnection("jdbc:mysql://localhost:8080/useToVote","root","qinx");
stmt=conn.createStatement();
}catch(Exception e){
System.out.println("创建数据库连接错误!");
}
}

//实现查询功能
public ResultSet GetResulte(String sql){
ResultSet rs=null;
try {
stmt=conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs=null;
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stmt=null;
}
}
return rs;
}
public void update(String sql){
Statement stmt=null;
try {
stmt=conn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println(e.toString());
}
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package kindsOfServlet;
import database.DB;
public class selectServlet extends HttpServlet {
public void doGet(...)throws ...{
response.setContentType("text/html");
ResultSet rs=null;
String username=request.getParameter("username");
String password=request.getParameter("password");
String sql="select * from vopwd where votor='"+username+"'";
DB db=new DB();
rs=db.GetResulte(sql);
try {
while(rs.next()){
if(rs.getString("password")==password){
response.sendRedirect("/useToVote/votingServlet");
}
}
。。。。。。(catch。。finally省略) }
public void doPost(。。。)throws ServletException, IOException {
this.doGet(request, response);
}
}
database.DB.GetResulte(DB.java:25)解决了,但问题at kindsOfServlet.selectServlet.doGet(selectServlet.java:47)
at kindsOfServlet.selectServlet.doPost(selectServlet.java:88)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
展开
 我来答
lot2
2012-05-31 · 超过10用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:37.6万
展开全部
楼主你把连接数据库写成构造器的形式,认为可以每次执行时都会连接,所以不在具体查询方法里面再做数据库的connection操作,这个方式显然发生错误了,建议不写成默认构造的形式。具体改法可以照我的例子改:
private static final String DRIVER="com.mysql.jdbc.Driver";
private static final String URL="jdbc:mysql://localhost:8080/useToVote";
private static final String USER="root";
private static final String PWD="qinx";

public Connection getConnection(){
Connection conn=null;
try {
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL,USER,PWD);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
然后在查询的GetResulte方法里面先加入conn=getConnection();开启连接,再继续往下。注意最后要关闭连接哦!希望对你有所帮助。
更多追问追答
追问
我写一个public class DB {。。。}(如上代码),在servlet中如果要用到直接DB db=new DB();,这是db对象自动初始化,直接连接(连接写在初始化中),这样也没什么问题吧?
追答
我知道你的意思,我有朋友也这么写了,同样跟你一样的空指针异常,理论上是没错,初始化先连接嘛。还有那样的话也会遇到一个问题,第一次可能是对的,可是刷新网页再执行一次就报错,因为你没关连接,所以开关数据库连接最好还是在方法里面。
百度网友fff3ffc
2012-05-31 · TA获得超过574个赞
知道小有建树答主
回答量:253
采纳率:100%
帮助的人:117万
展开全部
你要返回ResultSet,它是一个引用,但是你的方法里把ResultSet关闭了,所以返回来的ResultSet是关闭了的,因此发生null异常,特别记住返回ResultSet引用的时候要在外面关闭
public ResultSet GetResulte(String sql){
ResultSet rs=null;
try {
stmt=conn.createStatement();
rs = stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs=null;
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stmt=null;
}
}
return rs;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zk329754551
2012-05-31 · TA获得超过251个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:116万
展开全部
连接不上数据库的原因有
1、驱动jar包没有。
2、数据库服务没起。
3、连接字符串不正确或数据用户名密码错误。
conn=DriverManager.getConnection("jdbc:mysql://localhost:8080/useToVote","root","qinx");
你要连接mysql 你的mysql端口是配置的为8080吗 一般默认mysql端口为3306
8080为tomcat的默认端口
追问
我改回端口3306还是这个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gxq926
2012-05-31 · TA获得超过113个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:86.1万
展开全部
你把连接数据库getconnection 和resultSet写在两个方法里,但是第2个方法没有获得Connection。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd9006
2012-05-31 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
显然

conn=DriverManager.getConnection("jdbc:mysql://localhost:8080/useToVote","root","qinx");



Class.forName("com.mysql.jdbc.Driver");

失败,导致conn未创建、而还是null
更多追问追答
追问
我想问的是为什么会连不上?
追答
将 Exception 的 printStackTrace出来看具体原因
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式