连接数据库java.lang.nullPointerException的错误怎么解决?

Manlandyes 2010-08-27 05:26:32
代码如下:



package test;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DBServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
static private Connection con = null;
static private Statement st = null;
static private ResultSet rs = null;



public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/wing?useUnicode=true&characterEncoding=gb2312";
String username="123456";
String password="123456";

Connection con= DriverManager.getConnection(url,username,password);
if(con!=null){System.out.println("连接成功!!");}
else{System.out.println("失败!!");}
} catch (ClassNotFoundException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
return con;
}


public static ResultSet getResultSet(String sql){
con = getConnection();
try {
st = con.createStatement();
rs = st.executeQuery(sql);
} catch (SQLException e) {e.printStackTrace();}
return rs;
}





public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
request.setCharacterEncoding("gb2312");


PrintWriter out = response.getWriter();
String sql = "select * from wings";
rs = getResultSet(sql);
try {
out.println("<table border='1' align='center'>");
out.println("<tr>");
out.println("<td>"+"学号"+"</td>");
out.println("<td>"+"姓名"+"</td>");
out.println("<td>"+"性别"+"</td>");
out.println("<td>"+"年龄"+"</td>");
out.println("</tr>");
while(rs.next()){
out.println("<tr>");
out.println("<td>"+rs.getInt("ID")+"</td>");
out.println("<td>"+rs.getString("name")+"</td>");
out.println("<td>"+rs.getString("sex")+"</td>");
out.println("<td>"+rs.getInt("age")+"</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (SQLException e) {e.printStackTrace();}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}




}



出现错误如下:




java.sql.SQLException: Access denied for user '123456'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:812)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3269)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1182)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2670)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at test.DBServlet.getConnection(DBServlet.java:26)
at test.DBServlet.getResultSet(DBServlet.java:36)
at test.DBServlet.doPost(DBServlet.java:57)
at test.DBServlet.doGet(DBServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
2010-8-27 17:20:09 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet DBServlet threw exception
java.lang.NullPointerException

at test.DBServlet.getResultSet(DBServlet.java:38)
at test.DBServlet.doPost(DBServlet.java:57)
at test.DBServlet.doGet(DBServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)


这种错误怎么解决 谢谢!
...全文
675 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuzhonglian2004 2010-08-31
  • 打赏
  • 举报
回复
con为null了,连接还是没有建立起来
guyuewei 2010-08-31
  • 打赏
  • 举报
回复
其实是声明了2个Connection返回的是那个没连接的con!基础有点薄弱啊~!
chengjing123456 2010-08-31
  • 打赏
  • 举报
回复
用户名和密码输入错误。。。。。。。。。。
wang1986614 2010-08-31
  • 打赏
  • 举报
回复
打个断点!很简单的
whlcy 2010-08-30
  • 打赏
  • 举报
回复
mark!!!!
juhuacha159 2010-08-30
  • 打赏
  • 举报
回复
mark up!
cengshilieren 2010-08-30
  • 打赏
  • 举报
回复
看了帖子很受用,也感谢楼主把问题给大家分享
magong 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 manlandyes 的回复:]
26: Connection con= DriverManager.getConnection(url,username,password);
at test.DBServlet.getConnection(DBServlet.java:26)
[/Quote]
不知道搞出来没有。
第一稿中,看异常(如上)就很明显是数据库没连上,后面每稿,只盯着空指针异常看肯定会忽略主要问题。
就是数据库连不上嘛。
先把别的代码删掉,到能连上了再回填其他代码。
Manlandyes 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 kaida_7 的回复:]
看到这个错误的第一反应是:你数据库密码没写对!
[/Quote]

不是,第一条红色错误已经改过了,能显示“连接成功!!”了,就是第二条红色错误没消失~
kaida_7 2010-08-28
  • 打赏
  • 举报
回复
看到这个错误的第一反应是:你数据库密码没写对!
Manlandyes 2010-08-28
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 magong 的回复:]
引用楼主 manlandyes 的回复:
26: Connection con= DriverManager.getConnection(url,username,password);
at test.DBServlet.getConnection(DBServlet.java:26)

不知道搞出来没有。
第一稿中,看异常(如上)就很明显是数据库没连上,后面每稿,只盯着空指针异常看肯定……
[/Quote]

但它那里显示“连接成功!!”了
Manlandyes 2010-08-28
  • 打赏
  • 举报
回复
正确代码:

package test;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DBServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
static private Connection con = null;
static private Statement st = null;
static private ResultSet rs = null;



public static Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:MySQL://localhost:3306/wing?user=root&password=123456&characterEncoding=gb2312");
if(con!=null){System.out.println("连接成功!!");}
else{System.out.println("失败!!");}
} catch (ClassNotFoundException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
return con;
}


public static ResultSet getResultSet(String sql){
con = getConnection();
try {
st = con.createStatement();
rs = st.executeQuery(sql);
} catch (SQLException e) {e.printStackTrace();}
return rs;
}





public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
request.setCharacterEncoding("gb2312");


PrintWriter out = response.getWriter();
String sql = "select * from wings";
rs = getResultSet(sql);
try {
out.println("<table border='1' align='center'>");
out.println("<tr>");
out.println("<td>"+"学号"+"</td>");
out.println("<td>"+"姓名"+"</td>");
out.println("<td>"+"性别"+"</td>");
out.println("<td>"+"年龄"+"</td>");
out.println("</tr>");
while(rs.next()){
out.println("<tr>");
out.println("<td>"+rs.getInt("ID")+"</td>");
out.println("<td>"+rs.getString("name")+"</td>");
out.println("<td>"+rs.getString("sex")+"</td>");
out.println("<td>"+rs.getInt("age")+"</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (SQLException e) {e.printStackTrace();}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}




}


总结:试过数十种方法,左改右改,每次都运行不同,刚才,我拿回原来的代码,把用户名的123456改为root(即变成了上面的代码),运行,成功了!心情激动不已,但还是感谢回帖的各位,你们使我学到很多东西,可惜鄙人分数太小,不能每个人都给,想给不能给,想多给只能小给,多多不便敬请原谅!
fuxi922721 2010-08-28
  • 打赏
  • 举报
回复
一步一步测
magong 2010-08-28
  • 打赏
  • 举报
回复
连接成功了?恭喜。

19楼中你的代码是有问题的,无论是否连接成功getConnection方法都返回null。

关键在于不要混用同名的局部变量和成员变量,像20楼那样,只用成员变量,应该不会有这个问题了。试试他的代码吧。

或者你也可以只用局部变量。
crazylaa 2010-08-27
  • 打赏
  • 举报
回复
package test;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DBServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private Connection con1 = null;

private Statement st = null;

private ResultSet rs = null;

private Connection getConnection() {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/wing?useUnicode=true&characterEncoding=gb2312";
String username = "root";
String password = "123456";

con1 = DriverManager.getConnection(url, username,
password);
if (con1 != null) {
System.out.println("连接成功!!");
} else {
System.out.println("失败!!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con1;
}

public ResultSet getResultSet(String sql) {
con1 = getConnection();
try {
st = con1.createStatement();
rs = st.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");// 设置响应的MIME类型。
request.setCharacterEncoding("gb2312");

PrintWriter out = response.getWriter();
String sql = "select * from wings";
rs = getResultSet(sql);
try {
out.println("<table border='1' align='center'>");
out.println("<tr>");
out.println("<td>" + "学号" + "</td>");
out.println("<td>" + "姓名" + "</td>");
out.println("<td>" + "性别" + "</td>");
out.println("<td>" + "年龄" + "</td>");
out.println("</tr>");
while (rs.next()) {
out.println("<tr>");
out.println("<td>" + rs.getInt("ID") + "</td>");
out.println("<td>" + rs.getString("name") + "</td>");
out.println("<td>" + rs.getString("sex") + "</td>");
out.println("<td>" + rs.getInt("age") + "</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (SQLException e) {
e.printStackTrace();
}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
}
Manlandyes 2010-08-27
  • 打赏
  • 举报
回复
代码如下了:
package test;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DBServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
private Connection con1 = null;
private Statement st = null;
private ResultSet rs = null;



public Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/wing?useUnicode=true&characterEncoding=gb2312";
String username="root";
String password="123456";

Connection con1= DriverManager.getConnection(url,username,password);
if(con1!=null){System.out.println("连接成功!!");}
else{System.out.println("失败!!");}
} catch (ClassNotFoundException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
return con1;
}


public ResultSet getResultSet(String sql){
con1 = getConnection();
try {
st = con1.createStatement();
rs = st.executeQuery(sql);
} catch (SQLException e) {e.printStackTrace();}
return rs;
}





public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
request.setCharacterEncoding("gb2312");


PrintWriter out = response.getWriter();
String sql = "select * from wings";
rs = getResultSet(sql);
try {
out.println("<table border='1' align='center'>");
out.println("<tr>");
out.println("<td>"+"学号"+"</td>");
out.println("<td>"+"姓名"+"</td>");
out.println("<td>"+"性别"+"</td>");
out.println("<td>"+"年龄"+"</td>");
out.println("</tr>");
while(rs.next()){
out.println("<tr>");
out.println("<td>"+rs.getInt("ID")+"</td>");
out.println("<td>"+rs.getString("name")+"</td>");
out.println("<td>"+rs.getString("sex")+"</td>");
out.println("<td>"+rs.getInt("age")+"</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (SQLException e) {e.printStackTrace();}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}




}
还是:
2010-8-27 22:14:00 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet DBServlet threw exception
java.lang.NullPointerException
crazylaa 2010-08-27
  • 打赏
  • 举报
回复
public Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/wing?useUnicode=true&characterEncoding=gb2312";
String username="root";
String password="123456";

Connection Connection= DriverManager.getConnection(url,username,password);
if(Connection!=null){System.out.println("连接成功!!");}
else{System.out.println("失败!!");}
} catch (ClassNotFoundException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
return con;
}
把红色的两处改为 con1
蓝色的改为 con1
变量作用域问题。
Manlandyes 2010-08-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 crazylaa 的回复:]
引用 11 楼 manlandyes 的回复:

引用 9 楼 crazylaa 的回复:
at test.DBServlet.getResultSet(DBServlet.java:38)
这里是哪句话?
实在不行,你debug跟踪一下。
你的代码写的不好,哪有在servlet里面定义static变量来获取连接的。。。


38:st = con.createStatement……
[/Quote]


代码变成这样了:


package test;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DBServlet extends HttpServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
private Connection con = null;
private Statement st = null;
private ResultSet rs = null;



public Connection getConnection(){
try{
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/wing?useUnicode=true&characterEncoding=gb2312";
String username="root";
String password="123456";

Connection Connection= DriverManager.getConnection(url,username,password);
if(Connection!=null){System.out.println("连接成功!!");}
else{System.out.println("失败!!");}
} catch (ClassNotFoundException e) {e.printStackTrace();}
catch (SQLException e) {e.printStackTrace();}
return con;
}


public ResultSet getResultSet(String sql){
con = getConnection();
try {
st = con.createStatement();
rs = st.executeQuery(sql);
} catch (SQLException e) {e.printStackTrace();}
return rs;
}





public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");//设置响应的MIME类型。
request.setCharacterEncoding("gb2312");


PrintWriter out = response.getWriter();
String sql = "select * from wings";
rs = getResultSet(sql);
try {
out.println("<table border='1' align='center'>");
out.println("<tr>");
out.println("<td>"+"学号"+"</td>");
out.println("<td>"+"姓名"+"</td>");
out.println("<td>"+"性别"+"</td>");
out.println("<td>"+"年龄"+"</td>");
out.println("</tr>");
while(rs.next()){
out.println("<tr>");
out.println("<td>"+rs.getInt("ID")+"</td>");
out.println("<td>"+rs.getString("name")+"</td>");
out.println("<td>"+rs.getString("sex")+"</td>");
out.println("<td>"+rs.getInt("age")+"</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (SQLException e) {e.printStackTrace();}
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}




}


还是:
2010-8-27 21:17:28 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet DBServlet threw exception
java.lang.NullPointerException
jsdragon 2010-08-27
  • 打赏
  • 举报
回复
11111111111
jsdragon 2010-08-27
  • 打赏
  • 举报
回复
11111111111
加载更多回复(14)

81,092

社区成员

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

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