第三周进度报告(拼团系统项目)
相关代码以及数据库文件:
Coding地址
已实现模块
成功连接到数据库。正确显示数据库内容。本次完成的主要是对数据库中活动的列表展示。
主要代码
-
实验环境
Eclipse EE + mysql
-
连接数据库,主要是通过连接池来实现:
package pintuan.db;
import java.sql.*;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DBPool {
private String jndiName = "java:comp/env/jdbc/pintuan";
private Connection conn = null;
public DBPool() {
}
public DBPool(String jndiName){
this.jndiName = jndiName;
}
public Connection getConnection(){
try {
InitialContext context = new InitialContext();
DataSource ds = (DataSource) context.lookup(jndiName);
conn = ds.getConnection();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public ResultSet doQueryRS(String sql, Object[] params) throws SQLException {
conn = this.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i + 1, params[i]);
}
ResultSet rs = pstmt.executeQuery();
return rs;
}
public int doUpdate(String sql,Object[]params) throws SQLException{
conn = this.getConnection();
int res = 0;
PreparedStatement pstmt = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
pstmt.setObject(i+1, params[i]);
}
res = pstmt.executeUpdate();
this.close();
return res;
}
public void close(){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
-
其次编写的EventThreads类(相关的getter(),setter()方法这里不展示,都贴上来页面不友好):
package pintuan.bean;
import java.sql.Time;
import java.sql.Timestamp;
public class EventThreads {
private int EventID;
private String EventName;
private String EventType;
private String EventInitiator;
private int UserID;
private Time StarTime;
private Time EndTime;
private Time SignEndTime;
private Timestamp DateCreated;
private String Location;
private String Body;
private int HitTimes;
private int memberCount;
private int LimitCount;
-
编写相关DAO接口以及实现接口:
package pintuan.dao;
import java.util.List;
import pintuan.bean.EventThreads;
public interface EventThreadsDAO {
/*
*
* 获取所有的活动
*/
public abstract List<EventThreads> getEventThreads() throws Exception;
/*
*
* 根据活动类型获得活动
*/
public abstract List<EventThreads> getEventByType(String Type) throws Exception;
}
package pintuan.dao;
import java.awt.Event;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import pintuan.bean.EventThreads;
import pintuan.db.DBPool;
public class EventThreadsDaoImpl implements EventThreadsDAO {
@Override
public List<EventThreads> getEventThreads() throws Exception {
List<EventThreads> e_list = null;
ResultSet rs = null;
DBPool dbc = new DBPool();
e_list = new ArrayList<EventThreads>();
String sql = "select*from pt_eventthreads";
rs = dbc.doQueryRS(sql, new Object[]{});
while(rs.next()){
System.out.println(rs.getInt("EventID"));
EventThreads event = new EventThreads();
event.setEventID(rs.getInt("EventID"));
event.setEventName(rs.getString("EventName"));
event.setEventType(rs.getString("EventType"));
event.setEventInitiator(rs.getString("EventInitiator"));
event.setUserID(rs.getInt("UserID"));
event.setStarTime(rs.getTime("StartTime"));
event.setEndTime(rs.getTime("EndTime"));
event.setSignEndTime(rs.getTime("SignEndTime"));
event.setDateCreated(rs.getTimestamp("DateCreated"));
event.setLocation(rs.getString("Location"));
event.setBody(rs.getString("Body"));
event.setMemberCount(rs.getInt("MemberCount"));
event.setLimitCount(rs.getInt("LimitCount"));
e_list.add(event);
}
dbc.close();
return e_list;
}
@Override
public List<EventThreads> getEventByType(String type) throws Exception {
List<EventThreads> e_list = null;
ResultSet rs = null;
DBPool dbc = new DBPool();
e_list = new ArrayList<EventThreads>();
String sql = "select *from pt_eventthreads where EventType=?";
rs = dbc.doQueryRS(sql, new Object[]{type});
while(rs.next()){
EventThreads event = new EventThreads();
event.setEventID(rs.getInt("EventID"));
event.setEventName(rs.getString("EventName"));
event.setEventType(rs.getString("EventType"));
event.setEventInitiator(rs.getString("EventInitiator"));
event.setUserID(rs.getInt("UserID"));
event.setStarTime(rs.getTime("StartTime"));
event.setEndTime(rs.getTime("EndTime"));
event.setSignEndTime(rs.getTime("SignEndTime"));
event.setDateCreated(rs.getTimestamp("DateCreated"));
event.setLocation(rs.getString("Location"));
event.setBody(rs.getString("Body"));
event.setMemberCount(rs.getInt("MemberCount"));
event.setLimitCount(rs.getInt("LimitCount"));
e_list.add(event);
}
dbc.close();
return e_list;
}
}
-
最后编写一个showEvent.jsp用于测试,数据是否能正确传递,正确显示:
<%@page import="pintuan.bean.EventThreads"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import = "pintuan.db.*" %>
<%@page import = "pintuan.dao.*" %>
<%@page import = "java.util.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
DBPool dbc = new DBPool();
EventThreadsDAO eventDAO = new EventThreadsDaoImpl();
List<EventThreads> results = new ArrayList<EventThreads>();
results = eventDAO.getEventThreads();
%>
<table border="1">
<td>发起人ID</td> <td>发起人</td> <td>活动名称</td> <td>活动内容</td> <td>活动类型</td>
<td>活动开始时间</td><td>活动结束时间</td><td>活动发布时间</td><td>活动地点</td><td>限制人数</td>
<%
for(int i = 0;i<results.size();i++){
EventThreads event = results.get(i);
%>
<tr>
<td><%=event.getUserID()%></td>
<td><%=event.getEventInitiator() %></td>
<td><%=event.getEventName() %></td>
<td><%=event.getBody() %></td>
<td><%=event.getEventType() %></td>
<td><%=event.getStarTime() %></td>
<td><%=event.getEndTime() %></td>
<td><%=event.getDateCreated() %></td>
<td><%=event.getLocation() %></td>
<td><%=event.getLimitCount() %></td>
</tr>
<%} %>
</table>
</body>
</html>
-
运行截图:
小结反馈
- Servlet掌握得不是很熟练,所以这次没有用到,是一个大缺陷。但是个人认为一步一步来,不要太心急。
- JSP页面这块由小组中的另外两个成员负责,所以这次的jsp页面只是用于测试(不美观是一定的,要是就这样面向用户我肯定取关拉黑)
- 文档没有写好,这次做的过程中,我有尝试写一个需求分析,试图建立一个框架,但是失败了。一个方面是时间来不及,另一方面是用例图想用UML来画,结果花了一个钟头去研究,还是没搞清楚。
- 目前自己有建立起一个大体的框架,但是我觉得跟团队成员的沟通不是很多,但是在没有沟通的情况下我和团队成员竟然一个写了用户管理,一个写了活动管理。。。也是默契十足。接下来要改变的是交流这个习惯,我知道我之前做的不是很好。
- 这周的任务完成的还行,前两周的任务没写,第一周是刚开始建博客,我们讨论清楚哪些功能队长发布内容。第二周我的工作量比较少,主要是把数据库建起来(但是数据库的表于表的关联没做清楚),但是缺了进度报告。第三周,我觉得这样下去不是办法,然后度过了充实的一周。(图书馆偷电少女)
新一周计划
- 把相关步骤代码写个博客,让团队成员更好交接。
- 学习Servlet,改进代码。