正在回答 回答被采纳积分+1
6回答
一叶知秋519
2018-01-30 10:50:50
你好,关闭顺序最优依次是ResultSet Statement Connection;因此建议将ConnectionUtil()方法中的release方法的关闭顺序调整一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public static void release(Connection con, Statement sta, ResultSet res) { try { if (res != null ) { res.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (sta != null ) { sta.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (con != null ) { con.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } |
你修改关闭顺序后再试下,如果还有问题,可以再次提问。祝学习愉快~
慕容5410851
2018-01-29 19:27:48
ConnectionUtil类的代码如下,没发现什么问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package common; import java.sql.*; public final class ConnectionUtil { private ConnectionUtil(){} static { try { Class.forName( "com.mysql.jdbc.Driver" ); } catch (ClassNotFoundException e) { e.printStackTrace(); } } private static String url = "jdbc:mysql://localhost:3306/message_board" ; private static String user = "root" ; private static String passward = "lin123" ; public static Connection getConnection(){ try { return DriverManager.getConnection(url, user, passward); } catch (SQLException e) { e.printStackTrace(); } return null ; } public static void release(Connection con, Statement sta, ResultSet res){ try { if (res != null ) { res.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (con != null ){ con.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (sta != null ){ sta.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } } |
好帮手慕珊
2018-01-29 15:17:25
你好!下面这个类中,MessageDao只是声明了,没有创建对象,可以定义一个MessageService的构造方法,在该构造方法中创建MessageDao对象,然后赋值给messageDao。一般出现空指针异常都是因为调用方法的对象不存在造成的。所以可以看一下控制台的错误提示,会指出具体是哪一行代码出问题,然后进行原因排查,看看是否创建了对象,或者引用是否赋值的是一个非空的对象。祝学习愉快!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package service; import bean.Message; import dao.MessageDao; import java.util.List; public class MessageService { private MessageDao messageDao; public MessageService(){ messageDao = new MessageDao(); } public List<Message> getMessage( int page, int pageSize){ return messageDao.getMessage(page, pageSize); } public int count(){ return messageDao.count(); } } |
慕容5410851
2018-01-29 14:04:30
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package dao; import bean.Message; import common.ConnectionUtil; import java.sql.*; import java.util.ArrayList; import java.util.List; public class MessageDao { public List<Message> getMessage( int page, int pageSize){ Connection con = ConnectionUtil.getConnection(); PreparedStatement sta = null ; ResultSet res = null ; List<Message> list = new ArrayList<Message>(); String sql = "select * from message order by create_time desc limit ?, ?" ; try { sta = con.prepareStatement(sql); sta.setInt( 1 ,(page- 1 )*pageSize); sta.setInt( 2 ,pageSize); res = sta.executeQuery(); while (res.next()){ Message message = new Message(res.getLong( "id" ), res.getLong( "user_id" ), res.getString( "username" ), res.getString( "title" ), res.getString( "content" ), res.getTimestamp( "create_time" )); list.add(message); } } catch (SQLException e) { System.out.println( "连接失败" ); e.printStackTrace(); } finally { ConnectionUtil.release(con, sta, res); } //System.out.println(list); return list; } public int count(){ Connection con = ConnectionUtil.getConnection(); PreparedStatement sta = null ; ResultSet res = null ; String sql = "select count(*) total from message" ; try { sta = con.prepareStatement(sql); res = sta.executeQuery(); while (res.next()){ return res.getInt( "count" ); } } catch (SQLException e) { e.printStackTrace(); } finally { ConnectionUtil.release(con, sta, res); } return 0 ; } public static void main(String[] args) { List<Message> list = new ArrayList<Message>(); list = new MessageDao().getMessage( 1 , 5 ); System.out.println(list.size()); } } |
慕容5410851
2018-01-29 14:04:04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | package service; import bean.Message; import dao.MessageDao; import java.util.List; public class MessageService { private MessageDao messageDao; public MessageService(){ messageDao = new MessageDao(); } public List<Message> getMessage( int page, int pageSize){ return messageDao.getMessage(page, pageSize); } public int count(){ return messageDao.count(); } } |
慕容5410851
2018-01-29 14:03:37
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | package servlet; import bean.Message; import service.MessageService; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; public class MessageListServlet extends HttpServlet{ private MessageService messageService; @Override public void init() throws ServletException { super .init(); messageService = new MessageService(); } @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String pageStr = req.getParameter( "page" ); int page = 1 ; if (pageStr != null && !pageStr.equals( "" )){ try { page = Integer.parseInt(pageStr); } catch (NumberFormatException e) { e.printStackTrace(); } } List<Message> messages = messageService.getMessage(page, 5 ); int count = messageService.count(); req.setAttribute( "messages" , messages); req.setAttribute( "page" ,page); int last = count % 5 == 0 ? count / 5 : count / 5 + 1 ; req.setAttribute( "last" , last); req.getRequestDispatcher( "/WEB-INF/views/message_list.jsp" ).forward(req, resp); } @Override public void destroy() { super .destroy(); messageService = null ; } public static void main(String[] args) { MessageService messageService = new MessageService(); List<Message> messages = messageService.getMessage( 1 , 5 ); for (Message message : messages){ System.out.println(message); } } } |
Java数据库开发与实战应用2018版
- 参与学习 人
- 提交作业 277 份
- 解答问题 4297 个
Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧