看看从数据库取出来之后有没有使用set方法给对象赋值
我也是这个问题,找不到这个解决的方法
那个方法只是用于检测是否连上,如果不直接执行那个类文件的话,是没有用处的,mian方法删掉没得任何影响
能执行, 试一下就知道了
如你截图 getNString() 检查下查询那是不是有写错了。
这是单例模式和jdbc连接数据库,你可以百度找下资料
你把 itemsdao类里面的,也换成#就行了
run左边不是有个目录表吗,可以在目录表里面选择你要运行的项目
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <%@ page import="entity.Items"%> <%@ page import="dao.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <style type="text/css"> img { width: 200px; height: 150px; border: 1px solid black; } div { float: left; margin: 10px; } </style> </style> </head> <body> <h1>商品展示</h1> <hr> <center> <table width="750" height="60" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <!-- 商品循环开始 --> <% ItemsDAO itemsDao = new ItemsDAO(); ArrayList<Items> list = itemsDao.getAllItems(); if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { Items item = list.get(i); %> <div> <table> <tr> <td colspan="2"><a href="detail.jsp?id=<%=item.getId()%>"><img alt="" src="images/<%=item.getPicture()%>"></a></td> </tr> <tr> <td><%=item.getName()%></td> </tr> <tr> <td>产地:<%=item.getCity()%></td> <td>价格:<%=item.getPrice()%>元 </td> </tr> </table> </div> <% } } %> </td> </tr> </table> </center> </body> </html>
No operations allowed after connection closed.(在数据库关闭后不允许操作数据库)
看看是不是在你获取id值前,关闭了数据库。
图片传值就给图片设置超链接加参数,id为空你要去检查在传参的地方键是否和接受的键是一致的
在JSP页面,用form表单中的action属性来实现页面的跳转或者提交。可以跳转到servlet层,通过servlet层进入到数据库,把注册的数据添加到数据当中,然后在回到servlet层,通过servlet层跳转到登陆页面,然后再进行登陆就行了
你的 ItemsDao类中的 getItems()方法中的 item你创建的时候写的是:“Item item = null;”这样你给 item实例 的属性赋值调用 Item类 的方法的时候,系统认不出来这个 item引用 是 Item类型 的,所以无法赋值会直接报错,导致程序并没有执行,所以你的 items数组 中其实什么也没加进去是空的;
所以你的创建item是应该调用 Item类的构造方法:“Item item = new Item();”,这样系统才可以认出这个 item引用 是 Item类型 的引用;
另外while循环中最后一行,你把item引用置为空了而且又没有新创建一个 Item类型的实例,这样你第二次执行循环会出同样的错,而 ArrayList的add 存的只是对象的引用,并不是把对象内容重新copy一份再把新引用存进去,如果引用所指向的实例内容发生变化的话,ArrayList中引用指向的实例内容也随之发生变化。
所以 你应该把 item实例 的创建写进循环内部,每次循环都创建一个 item新实例,再进行赋值并添加到 items数组 中;
如果不是每次循环每次新建的话,你最后 items数组 中存的其实是同一个item的引用,也就是说虽然有十条绳子,但是牵的是一条狗。最终会导致 items数组 中的内容都一样,页面里显示的是同一个商品,只不过显示了十个。
<a href="details.jsp?id=<item.getId()>" 这里的?后面id会作为参数传递过去,下一个页面可以request.getpapameter()到
我觉得是pid没有值传过来
软件部所谓了,我用的也不是myecplise,这个软件太丑了, 我用的是IDEA, 主要还是对J2EE和web服务的理解吧。
传递一个ID能保证每次获取的数据都是最新的,不然可能数据库中已经修改了商品信息,从集合中获取的数据就不是最新的了,生产环境中会出现问题,比如价格的变化
你的itemsDao.a();是什么东西啊?
能否描述清楚一点,最好有报错信息等等
执行sql命令: create database shopping
rs.close()是把从数据库查询的结果从缓存清空,stmt.close()是把预编译的数据库查询语句清空
(select * from items),即使没有close()方法程序结束时也会自己清空缓存的数据,一般好的编程习惯在最后都会加上.close()方法。关于close()方法在学IO流的时候有详细讲解
主要看rs:rs是ResultSet对象——ResultSet对象 具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集(以上摘自网络)。你的这些代码就在while(rs.next())循环里面,顺序就是按照数据表的顺序读取。
谢谢你的回答
你看下这块写对了么,你这个错误我看着是details jsp页面接受到的id不对啊.
<a href="details.jsp?id=<%=i.getId()%>">
在itemsDAO你定义了.getViewList这个方法吗