请各位大神帮我看下我的代码 看看我应该怎么修改

qq744056399 2016-12-27 06:12:59

QueryMessageServlet.java


package com.MSG2.servlet;
import java.io.IOException;
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 java.util.HashMap;
import java.util.List;
import java.util.Map;

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


public class QueryMessageServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}

private static final long serialVersionUID = 6370397999953861485L;

private List<Map<String,Object>> query(String serial,Connection conn) throws SQLException{
String sql1 = "SELECT Message,number,messa,user,Raply FROM reply WHERE Message=?";
PreparedStatement pst = conn.prepareStatement(sql1);
pst.setString(1, serial);
ResultSet rs = pst.executeQuery();
if (rs != null && rs.next()){
List<Map<String,Object>> list1 = new ArrayList<Map<String,Object>>();
while (true) {
Map<String, Object> map1 = new HashMap<String,Object>();
map1.put("Message",rs.getString("Message"));
map1.put("number",rs.getString("number"));
map1.put("messa",rs.getString("messa"));
map1.put("user",rs.getString("user"));
map1.put("Raply",rs.getString("Raply"));
List<Map<String,Object>> l = query(rs.getString("Message"),conn);
map1.put("replys", l);

list1.add(map1);

if(!rs.next()){
break;
}
}
return list1;
}
return null;
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Connection conn = null;
String URL = "jdbc:mysql://localhost:3306/test3?useUnicode=true&characterEncoding=utf-8";
String USER = "root";
String PWD = "123456";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER, PWD);
String sql = "SELECT serial,username,content FROM message";
PreparedStatement pre = conn.prepareStatement(sql);
ResultSet re = pre.executeQuery();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (re != null) {
while (re.next()) {
Map<String, Object> map = new HashMap<String, Object>();
int serial1 = re.getInt("serial");
String serial = "" + serial1;
map.put("serial", serial);
map.put("username", re.getString("username"));
map.put("content", re.getString("content"));
List<Map<String,Object>> l = query(serial,conn);
map.put("replys", l);
list.add(map);
}
} else {
System.out.println("还未留言");
}
HttpSession session = req.getSession();
session.setAttribute("list",list);
session.setAttribute("list1",list);
resp.sendRedirect(req.getContextPath() + "/list.jsp");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
}

}

}

如果是以上代码的话 conn会以参数的方式传入query()方法 倒是这样的话又会造成死循环好像会影响到query()里面的游标

package com.MSG2.servlet;

import java.io.IOException;
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 java.util.HashMap;
import java.util.List;
import java.util.Map;

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


public class QueryMessageServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
private static final long serialVersionUID = 6370397999953861485L;



private List<Map<String,Object>> query(String serial) throws SQLException{
Connection conn = null;
String sql1 = "SELECT Message,number,messa,user,Raply FROM reply WHERE Message=?";
PreparedStatement pst = conn.prepareStatement(sql1);
pst.setString(1, serial);
ResultSet rs = pst.executeQuery();
if (rs != null && rs.next()){
List<Map<String,Object>> list1 = new ArrayList<Map<String,Object>>();
while (true) {
Map<String, Object> map1 = new HashMap<String,Object>();
map1.put("Message",rs.getString("Message"));
map1.put("number",rs.getString("number"));
map1.put("messa",rs.getString("messa"));
map1.put("user",rs.getString("user"));
map1.put("Raply",rs.getString("Raply"));
List<Map<String,Object>> l = query(rs.getString("Message"));
map1.put("replys", l);

list1.add(map1);

if(!rs.next()){
break;
}
}
return list1;
}
return null;
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String URL = "jdbc:mysql://localhost:3306/test3?useUnicode=true&characterEncoding=utf-8";
String USER = "root";
String PWD = "123456";
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER, PWD);
String sql = "SELECT serial,username,content FROM message";
PreparedStatement pre = conn.prepareStatement(sql);
ResultSet re = pre.executeQuery();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
if (re != null) {
while (re.next()) {
Map<String, Object> map = new HashMap<String, Object>();
int serial1 = re.getInt("serial");
String serial = "" + serial1;
map.put("serial", serial);
map.put("username", re.getString("username"));
map.put("content", re.getString("content"));
List<Map<String,Object>> l = query(serial);
map.put("replys", l);
list.add(map);
}
} else {
System.out.println("还未留言");
}
HttpSession session = req.getSession();
session.setAttribute("list",list);
session.setAttribute("list1",list);
resp.sendRedirect(req.getContextPath() + "/list.jsp");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {

e.printStackTrace();
}
}
}

}

}


如果是这样的话代码的话又报这种错误严重: Servlet.service() for servlet query-message threw exception
java.lang.NullPointerException
at com.MSG2.servlet.QueryMessageServlet.query(QueryMessageServlet.java:34)
at com.MSG2.servlet.QueryMessageServlet.doPost(QueryMessageServlet.java:79)
at com.MSG2.servlet.QueryMessageServlet.doGet(QueryMessageServlet.java:25)
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:852)
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(Thread.java:745)
我已经试了不少方法 但都不行 不少报空就是死循环
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq744056399 2016-12-27
  • 打赏
  • 举报
回复


Connection conn = null;
        String sql1 = "SELECT Message,number,messa,user,Raply FROM reply WHERE Message=?";
        PreparedStatement pst = conn.prepareStatement(sql1);
conn为空会报空指针我知道,但是如果是从query(serial);传参数进来的话康恩又会受到的doPost()里面conn的印象出现死循环我试了很多方法包括把连接数据库的那块单独用一个函数但这样他又会报连接重复所有我现在也不知道怎么改了希望各位大神给个建议。
qq744056399 2016-12-27
  • 打赏
  • 举报
回复

Connection conn = null;
        String sql1 = "SELECT Message,number,messa,user,Raply FROM reply WHERE Message=?";
        PreparedStatement pst = conn.prepareStatement(sql1);
conn为空会报空指针我知道,但是如果是从query(serial);传参数进来的话康恩又会受到的doPost()里面康涅狄格州的印象出现死循环我试了很多方法包括把连接数据库的那块单独用一个函数但这样他又会报连接重复所有我现在也不知道怎么改了希望各位大神给个建议。
qq744056399 2016-12-27
  • 打赏
  • 举报
回复
Connection conn = null; String sql1 = "SELECT Message,number,messa,user,Raply FROM reply WHERE Message=?"; PreparedStatement pst = conn.prepareStatement(sql1); conn 为空会报空指针 我知道,但是如何是从query(String serial)传参数进来的话conn又会受到doPost()里面conn的印象出现死循环 我试了很多方法 包括把连接数据库的那块单独用一个函数 但这样他又会报连接重复 所有我现在也不知道怎么改了 希望各位大神给个建议。
爱睡觉的阿狸 2016-12-27
  • 打赏
  • 举报
回复
query(String serial)方法里面的conn是null,没有赋值。
bcsflilong 2016-12-27
  • 打赏
  • 举报
回复
Connection conn = null;
        String sql1 = "SELECT Message,number,messa,user,Raply FROM reply WHERE Message=?";
        PreparedStatement pst = conn.prepareStatement(sql1);
你看这里 明显有毛病 conn 还是一个null 你就调用了 一定会报空指针异常的

67,513

社区成员

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

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