标题:讲述对数据库中二维表格的操作![原创][struts框架]
只看楼主
爱像深蓝
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-7-10
 问题点数:0 回复次数:5 
讲述对数据库中二维表格的操作![原创][struts框架]

大家好呀
呵呵...好久不见了!近半个月没什么写东西了;今天给大家讲的内容是关于数据库的二维表格的,大家知道数据库中的一张表虽然是以二维的形势存在,而对于数据的存储是以一维的形势存放的.为什么这样说呢?因为数据库中的一张表如果说代表着一个现实生活中的实体的话,那么他的每个字段则是对于这个实体的特征描述,即此实体的属性,而这个表中的每条记录,则是此实体所生成的每个实例对象,例如:
表:教师,而姓名:张三,ID:001
而数据库中还有一种类型的表,这种表被称之为关系表,他的存在一般而言没有实际的意义!他是把两张有关系的表,联系到一起,个人感觉就好像是红娘或是月老,起个一线纤的作用!
如果说要把这样的表反应到前台,是没有实际意义的,这样的表中所描述的内容只不过是相当于索引一样的东西.如果说要显示出来也就是要画一张二维表格,即通过两表的记录是否存在关来确定它们的状态:换句话说,即两者存在关系则给一个状态,否则给另一个状态!
即像下列表中所示: 教师姓名\课程内容 语文 数字 物理 英语 生物 历史 计算机 软件开发
吴文斌 √ √
周明惠 √ √
郑育彤 √
王华民 √
冯其新 √ √
禇遂宁 √
Vicki √ √
胡萌 √ √
Scott √ √
下面我给大家演示的就是如何把一个关系表,正确的显示到页面上,下面是以struts1.2为核心框架,基于J2EE,以JAVA为基础语言的小例子的源码大家可以参考下:
首先,我来讲下我的思路,我先把两张相关的表的每个字段读出,然后以相交两个字段为查询条件查出是否存在结果,存在结果即关联,则给一个状态,否则没有关系,则给另一个状态!请看源码:

/*这是ACTION的代码*/

package org.shine.action;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class QueryTeach extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ServletContext context =servlet.getServletContext();
DataSource source = (DataSource)context.getAttribute("SQLServer2k");
Connection cn = source.getConnection();//从数据库连接池中取得数据源
Statement st = cn.createStatement(); //实例一个statement对象用于执行查询语句


int i = 0;
int j = 0;
int iCourseCount = 0; //用于统计课程记录行数
int iTeacherCount = 0; //用于统计教师数量记录行数
String strSql = "select sum(1) from Course"; //查询出所有的课程的记录集行数
ResultSet rs = st.executeQuery(strSql);


while(rs.next()){
iCourseCount = rs.getInt(1); //统计课程的行数
}
String[] cName = new String[iCourseCount];
rs.close();//关闭记录集

strSql = "select cName from Course";
rs = st.executeQuery(strSql);
//使用ResultSet对象得到statement返回的记录集

while(rs.next()){
cName = rs.getString(1); //将取得到的课程名保存于cName这个字符数组中
i++;
}
i = 0; //复位计数器

strSql = "select sum(1) from teacher"; //记录集返回统计的老师的人数
rs = st.executeQuery(strSql); //执行查询返回结果集
while(rs.next()){
iTeacherCount = rs.getInt(1); //得到记录集的字段,即返回此记录集的行数
}
rs.close(); //关闭记录集

String tName[] = new String[iTeacherCount]; //定义一个字符串数组,长度为老师的人数,即用于保存老师的姓名
strSql = "select tName from teacher";
rs = st.executeQuery(strSql);
while(rs.next()){
tName = rs.getString(1);
i++;
}
rs.close(); //关闭记录集
int[][] nResult = new int[iTeacherCount][iCourseCount];//设置一个二维数组反映具体教师授课情况
for(i = 0;i < iTeacherCount;i++){
for(j = 0;j<iCourseCount;j++){
strSql = "select cName from Course c,Teach tc,Teacher t where c.CID = tc.CID and t.TID = tc.TID and tName = '"+tName+"' and cName='"+cName[j]+"'";
rs = st.executeQuery(strSql);
if(rs.next()){ //查询如果有结果则表明教师和课程相交的那行的结果,是存在关系,即授课关系,则作上标记;否则不存在关系
nResult[j] = 1; //存在授课标记为1
}
else{
nResult[j] = 0; //存在授课标记为0
}
}
}
request.setAttribute("cName",cName); //将所有课程发送至前台
request.setAttribute("tName",tName); //将所有教师发送至前台
request.setAttribute("nResult",nResult);//将教师授课内容发送至前台

cn.close(); //关闭数据库连接
return mapping.findForward("ResultPage"); //跳转至XML里设置的前台JSP页面.详细见struts-config.xml里global-forwards的设置

}
}


/*这是struts-config.xml*/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources>
<data-source type="org.apache.commons.dbcp.BasicDataSource" key="SQLServer2k">
<set-property value="com.microsoft.jdbc.sqlserver.SQLServerDriver" property="driverClassName"/>
<set-property value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Test" property="url"/>
<set-property value="sa" property="username"/>
<set-property value="sa" property="password"/>
<set-property value="5" property="maxActive"/>
<set-property value="true" property="autoCommit"/>
</data-source>
</data-sources>
<form-beans />
<global-exceptions />
<global-forwards>
<forward name="ResultPage" path="/ResultPage.jsp"/>
</global-forwards>
<action-mappings>
<action path="/QueryTeach" type="org.shine.action.QueryTeach" scope="request"/>
</action-mappings>
<message-resources parameter="org.shine.struts.ApplicationResources" />
</struts-config>

<!--下面是页面的代码-->

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<html:base />

<title>authors.jsp</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">
</head>
<%
/*接受后台传来的数据,即课程名称,教师姓名,授课关系*/
String[] cName = (String[])request.getAttribute("cName");
String[] tName = (String[])request.getAttribute("tName");
int[][] nResult = (int[][])request.getAttribute("nResult");
/*定义累加器变量, 即i ,j*/
int i = 0;
int j = 0;
%>
<body>
<table cellspacing="0" cellpadding="0" border="1" bgcolor="#ff80ff">
<%
for(i = 0;i <= tName.length;i++){
%>
<tr>
<%
for(j = 0;j <= cName.length;j++){
if(i == 0 && j == 0){
//左上角角标
%>
<td>教师姓名\课程内容</td>
<%
}
if(i == 0 && j != 0){
//cName[j];读出课程名称
%>
<td><%=cName[j-1]%></td>
<%
}
if(j == 0 && i != 0){
//tName; //读出所有老师姓名
%>
<td><%=tName[i-1]%></td>
<%
}
if(i != 0 && j != 0){
if(nResult[i-1][j-1]==1){
//打印√
%>
<td>√</td>
<%
}
else{
%>
<td> </td>
<%
}
}
}%>
</tr>
<%
}
%>
</table>


</body>
</html:html>

搜索更多相关主题的帖子: 数据库 表格 struts 实体 框架 
2007-11-04 15:25
编辑01
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2007-9-28
得分:0 
编程中国原创计划及声明
  • 严肃性
    不求文章要写的多么经典,但一定要是自己的原创。求助、转载、广告等其他类型帖子冒充原创者,视用户等级禁言一段时间或封ID。

  • 本站首发
    原创帖必须是本站首发,在其他站点发布以后在本论坛发布的,我们拒绝承认为原创,一律视为转载。

  • 鼓励原创
    原创帖在发布以后,管理员通过网上划词搜索辨别是否为原创,如确定为原创,只要文章不是过于简陋就会推荐为本版精华,优秀的同时收录至本站技术教程频道。
2007-11-05 10:15
编辑01
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2007-9-28
得分:0 
2007-11-05 10:15
爱像深蓝
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-7-10
得分:0 

汗.这就是本人的博客....

2007-11-05 10:24
爱像深蓝
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-7-10
得分:0 
在下只能说你的理解能力和辨别能力都是零!如果说你仔细的看过http://blog.sina.com.cn/s/blog_544b9437010006rm.htmlhttp://blog.sina.com.cn/loveblue52081的文章,再看看本人在此论坛发的主题或回复.你难道说还觉得是两个人写的吗?
2007-11-05 10:30
a276202460
Rank: 2
等 级:新手上路
威 望:4
帖 子:392
专家分:1
注 册:2007-4-10
得分:0 
好玩:)

2007-11-05 19:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-183410-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.097149 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved