java空指针异常

zbq19930108 2015-03-25 10:55:01
各位,我有一段代码总是报空指针异常,求指点
package liuyanban;

//用来保存留言信息
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

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

import org.omg.CORBA.Request;

public class AddMessageServlet extends HttpServlet {
Connection con ;
//PreparedStatement stmt;
// 数据库连接方法
public AddMessageServlet() {
String url = "jdbc:sqlserver://localhost:1433;DatabaseName=liuyan";
String userName = "sa";
String password = "123456";
con=null;
Statement stmt=null;
String sql = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");// 加载数据库驱动
con = DriverManager.getConnection(url, userName, password);
} catch (ClassNotFoundException e) {
System.out.println("加载驱动器类时出现异常");
} catch (Exception e) {
System.out.println("出现SQLException");
}
}
// 可以用 doGet方法处理数据库增、删、改、查等
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");// 设置响应编码方式
request.setCharacterEncoding("utf-8");// 设置响应编码方式

String name = request.getParameter("name");// 从前台页面获取信息
String title = request.getParameter("title");
String email = request.getParameter("email");
String content = request.getParameter("content");
if (name == null) {
name = "";
}
if (email == null) {
email = "";
}
if (title == null) {
title = "";
}
if (content == null) {
content = "";
}
try {
PreparedStatement ps = con.prepareStatement("insert into message values(?,?,?,?,?)");// 向表中插入从页面获取的数据
ps.setString(1, title);
ps.setString(2, name);
ps.setDate(3, new java.sql.Date(new java.util.Date().getTime()));
if (email.length() == 0) {
ps.setString(5, null);
} else {
ps.setString(4, content);
ps.setString(5, email);
}
try {
ps.executeUpdate();
} catch (Exception e) {

}
// 关闭数据库连接
// con.close;
RequestDispatcher dispatcher = request
.getRequestDispatcher("/ViewMessageServlet");// 可以把当前request传到资源
dispatcher.forward(request, response);// 用来传到ViewMessageServlet获得数据,映射地址在XML中
} catch (SQLException e) {

e.printStackTrace();
}

}

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

}
...全文
218 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
64行在哪里?
dgq450 2015-03-26
  • 打赏
  • 举报
回复
你的con没获取到连接
leeKitty 2015-03-26
  • 打赏
  • 举报
回复
引用 8 楼 dbing129129 的回复:
[quote=引用 7 楼 lkt19911025 的回复:] 你的  con 是空的<br /> AddMessageServlet 类 在前端使用的时候 应该是没有实例化的<br /> 在前端向Servlet传值后 直接进入 doGet函数 在con时 只有一个定义而已<br /> <br /> Connection con ;<br /> 你把con的初始化拿到外面 写成一个private connection getconnection() <br /> <br /> throws sqlexception {}函数  然后在doGet 方法里调用这个方法   就不会空了
[/quote]
wuyuzhong2 2015-03-26
  • 打赏
  • 举报
回复
引用 7 楼 lkt19911025 的回复:
你的  con 是空的<br /> AddMessageServlet 类 在前端使用的时候 应该是没有实例化的<br /> 在前端向Servlet传值后 直接进入 doGet函数 在con时 只有一个定义而已<br /> <br /> Connection con ;<br /> 你把con的初始化拿到外面 写成一个private connection getconnection() <br /> <br /> throws sqlexception {}函数  然后在doGet 方法里调用这个方法   就不会空了
leeKitty 2015-03-26
  • 打赏
  • 举报
回复
你的 con 是空的 AddMessageServlet 类 在前端使用的时候 应该是没有实例化的 在前端向Servlet传值后 直接进入 doGet函数 在con时 只有一个定义而已 Connection con ; 你把con的初始化拿到外面 写成一个private connection getconnection() throws sqlexception {}函数 然后在doGet 方法里调用这个方法 就不会空了
小伙要自信 2015-03-26
  • 打赏
  • 举报
回复
为啥,我看着代码PreparedStatement ps = con.prepareStatement("insert into message values(?,?,?,?,?)") 中,就感觉con 为空呢,没有获取连接啊
  • 打赏
  • 举报
回复
引用 3 楼 xiangnan129 的回复:
应该是这行出错了,你在用的时候,都不判断一下你的connection连接是不是为null吗, 你自己输出一下,看是不是connection为null, 如果为null就可能是你拿连接有问题了。 不过你在使用之前还是做个if判断是否为null安全一点
分析的有道理
scott_129 2015-03-25
  • 打赏
  • 举报
回复
应该是这行出错了,你在用的时候,都不判断一下你的connection连接是不是为null吗, 你自己输出一下,看是不是connection为null, 如果为null就可能是你拿连接有问题了。 不过你在使用之前还是做个if判断是否为null安全一点
LFANG- 2015-03-25
  • 打赏
  • 举报
回复
你解决了吗?
姜小白- 2015-03-25
  • 打赏
  • 举报
回复
64行是哪一行呢 ? PreparedStatement ps = con.prepareStatement("insert into message values(?,?,?,?,?)"); 吗? 如果是这一行出错,那检查一下你的con 对象,看是否获取到数据库连接?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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