`
naiquan_hu
  • 浏览: 66665 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库表的行转列,并用struts2在页面显示二维数组

阅读更多
一、需求:目前在做一集中监控系统的项目,其中有个需求就是agent采集上来的针对每个属性的数据都是分多行存储的(如文件系统属性,有盘符、空间大小,使用量、空闲量等多行记录),现在要把这么多行的记录转化成一行记录,这行记录每一列数据对应先前的每一行数据。
二、建表(使用oracle10g)
CREATE TABLE T_PROPERTY_STATUS
(
  PROPERTYSTATUS_ID      INTEGER                NOT NULL,
  OBJECTPROPERTY_ID      INTEGER,
  PROPERTYSTATUSNAME     VARCHAR2(64 BYTE),
  PROPERTY_STATUS_VALUE  VARCHAR2(1024 BYTE),
  PROPERTY_STATUS        INTEGER,
  IFMONITOR              INTEGER,
  IFNOTIFY               INTEGER,
  IFRESTORE              INTEGER,
  PERFORMDATE            DATE,
  UNITE_INDEX            INTEGER
)
表中数据:



需要在页面中显示成的记录形式:



三、采用SSH框架实现
   1. 创建对应原始表的实体类(PropertyStatus.java):
package bscms3.monitorobjmng.domain;

import java.util.Date;

public class PropertyStatus implements java.io.Serializable{
private Integer propertyStatusId;
private Integer objectPropertyId;
private String propertyStatusName;
private String propertyStatusValue;
private Integer propertyStatus;
private Integer ifMonitor;
private Integer ifNotify;
private Integer ifRestore;
private Date performDate;
private Integer uniteIndex;
public Integer getPropertyStatusId() {
return propertyStatusId;
}
public void setPropertyStatusId(Integer propertyStatusId) {
this.propertyStatusId = propertyStatusId;
}
public Integer getObjectPropertyId() {
return objectPropertyId;
}
public void setObjectPropertyId(Integer objectPropertyId) {
this.objectPropertyId = objectPropertyId;
}
public String getPropertyStatusName() {
return propertyStatusName;
}
public void setPropertyStatusName(String propertyStatusName) {
this.propertyStatusName = propertyStatusName;
}
public String getPropertyStatusValue() {
return propertyStatusValue;
}
public void setPropertyStatusValue(String propertyStatusValue) {
this.propertyStatusValue = propertyStatusValue;
}
public Integer getPropertyStatus() {
return propertyStatus;
}
public void setPropertyStatus(Integer propertyStatus) {
this.propertyStatus = propertyStatus;
}
public Integer getIfMonitor() {
return ifMonitor;
}
public void setIfMonitor(Integer ifMonitor) {
this.ifMonitor = ifMonitor;
}
public Integer getIfNotify() {
return ifNotify;
}
public void setIfNotify(Integer ifNotify) {
this.ifNotify = ifNotify;
}
public Integer getIfRestore() {
return ifRestore;
}
public void setIfRestore(Integer ifRestore) {
this.ifRestore = ifRestore;
}
public Date getPerformDate() {
return performDate;
}
public void setPerformDate(Date performDate) {
this.performDate = performDate;
}
public Integer getUniteIndex() {
return uniteIndex;
}
public void setUniteIndex(Integer uniteIndex) {
this.uniteIndex = uniteIndex;
}

}

2. 对应该实体类的映射文件(PropertyStatus.hbm.xml):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="bscms3.monitorobjmng.domain.PropertyStatus" table="t_property_status" catalog="bscms">
        <id name="propertyStatusId" type="java.lang.Integer">
            <column name="propertystatus_id" />
           <generator class="sequence" >
            <param name="sequence">PUBLIC_SEQ</param>
            </generator>
        </id>
        <property name="objectPropertyId" type="java.lang.Integer">
            <column name="objectproperty_id" />
        </property>
        <property name="propertyStatusName" type="java.lang.String">
            <column name="propertystatusname" length="64" />
        </property>
        <property name="propertyStatusValue" type="java.lang.String">
            <column name="property_status_value" length="1024" />
        </property>
        <property name="propertyStatus" type="java.lang.Integer">
            <column name="property_status"/>
        </property>
        <property name="ifMonitor" type="java.lang.Integer">
            <column name="ifmonitor"/>
        </property>
        <property name="ifNotify" type="java.lang.Integer">
            <column name="ifnotify"/>
        </property>
        <property name="ifRestore" type="java.lang.Integer">
            <column name="ifrestore"/>
        </property>
        <property name="performDate" type="java.util.Date">
            <column name="performdate"/>
        </property>
        <property name="uniteIndex" type="java.lang.Integer">
            <column name="unite_index"/>
        </property>
    </class>
</hibernate-mapping>

3.DAO接口及实现类(PropertyStatusDao.java, PropertyStatusDaoImpl.java)
//PropertyStatusDao.java
package bscms3.monitorobjmng.dao;

import java.util.List;

import bscms3.monitorobjmng.domain.PropertyStatus;

public interface PropertyStatusDao {
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId);
public Integer getRows(Integer objectPropertyId);
public Long getCols(Integer objectPropertyId);
}

//PropertyStatusDaoImpl.java
package bscms3.monitorobjmng.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;



import bscms3.monitorobjmng.dao.PropertyStatusDao;
import bscms3.monitorobjmng.domain.PropertyStatus;

public class PropertyStatusDaoImpl extends HibernateDaoSupport implements PropertyStatusDao{
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId){
String sql=null;
sql="FROM PropertyStatus ps WHERE ps.objectPropertyId="+objectPropertyId+"ORDER BY ps.propertyStatusId";
return this.getHibernateTemplate().find(sql);
}
public Integer getRows(Integer objectPropertyId){
String sql = "select max(uniteIndex) from PropertyStatus where objectPropertyId="+objectPropertyId;
return (Integer)this.getHibernateTemplate().find(sql).get(0)+1;
}
public Long getCols(Integer objectPropertyId){
String sql = "select count(propertyStatusId) from PropertyStatus where objectPropertyId="+objectPropertyId+" and uniteIndex=1";
return (Long)this.getHibernateTemplate().find(sql).get(0);
}
}

4. Service接口及实现类(PropertyStatusService.java, PropertyStatusServiceImpl.java)

//PropertyStatusService.java
package bscms3.monitorobjmng.service;

import java.util.List;

import bscms3.monitorobjmng.domain.PropertyStatus;

public interface PropertyStatusService {
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId);
public Integer getRows(Integer objectPropertyId);
public Long getCols(Integer objectPropertyId);
}

//PropertyStatusServiceImpl.java
package bscms3.monitorobjmng.service.impl;

import java.util.List;

import bscms3.monitorobjmng.dao.PropertyStatusDao;
import bscms3.monitorobjmng.domain.PropertyStatus;
import bscms3.monitorobjmng.service.PropertyStatusService;

public class PropertyStatusServiceImpl implements PropertyStatusService{
PropertyStatusDao propertyStatusDao;
public List<PropertyStatus> getAllPropertyStatus(Integer objectPropertyId){
return propertyStatusDao.getAllPropertyStatus(objectPropertyId);
}
public Integer getRows(Integer objectPropertyId){
return propertyStatusDao.getRows(objectPropertyId);
}
public Long getCols(Integer objectPropertyId){
return propertyStatusDao.getCols(objectPropertyId);
}

public PropertyStatusDao getPropertyStatusDao() {
return propertyStatusDao;
}
public void setPropertyStatusDao(PropertyStatusDao propertyStatusDao) {
this.propertyStatusDao = propertyStatusDao;
}
}

5. Action类 (PropertyStatusAction.java)
//PropertyStatusAction.java
package bscms3.strategymng.action.strategies;

import java.util.List;

import bscms3.monitorobjmng.domain.PropertyStatus;
import bscms3.monitorobjmng.service.PropertyStatusService;

import com.opensymphony.xwork2.ActionSupport;

public class PropertyStatusAction extends ActionSupport{
private Integer objectPropertyId;//由于查的是关于监控对象的某一属性的信息,所以需要上文带来属性ID的值
private PropertyStatusService propertyStatusService;
private String[][] items;//用于存放处理后的数据,第一行存放表头,其余行存对应的数据
public Integer getObjectPropertyId() {
return objectPropertyId;
}
public void setObjectPropertyId(Integer objectPropertyId) {
this.objectPropertyId = objectPropertyId;
}
public PropertyStatusService getPropertyStatusService() {
return propertyStatusService;
}
public void setPropertyStatusService(PropertyStatusService propertyStatusService) {
this.propertyStatusService = propertyStatusService;
}
public String[][] getItems() {
return items;
}
public void setItems(String[][] items) {
this.items = items;
}

public String getData(){
if(this.objectPropertyId!=null){
List<PropertyStatus> propertyStatus=propertyStatusService.getAllPropertyStatus(this.objectPropertyId);
int row=(int)propertyStatusService.getRows(this.objectPropertyId);
long col=(long)propertyStatusService.getCols(this.objectPropertyId);
int col2=(int) col;
String[][] tmp_items=new String[row][col2];
int row_index=1,col_index=0;
for(int i=0; i<propertyStatus.size();i++){
PropertyStatus tmp_propertyStatus=(PropertyStatus)propertyStatus.get(i);

if(tmp_items[0][col_index]==null)
tmp_items[0][col_index]=tmp_propertyStatus.getPropertyStatusName();

tmp_items[row_index][col_index]=tmp_propertyStatus.getPropertyStatusValue();
col_index++;
if(col_index>=col2){
col_index=0;
row_index++;
}


}
this.setItems(tmp_items);
return SUCCESS;
}
return ERROR;
}
}

6.配置applicationContext.xml
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 定义c3p0数据源 -->
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 指定连接数据库驱动 -->
<!-- property name="driverClass" value="com.mysql.jdbc.Driver" / -->
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<!-- 指定连接数据库url -->

<property name="jdbcUrl" value="jdbc:oracle:thin:@10.66.7.233:1522:bscms" />
<!-- 指定连接数据库用户名,密码为空 -->
<property name="user" value="bscms" />
<property name="password" value="bscms" />
</bean>
<!-- 定义Hibernate的sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 指定Hibernate映射文件 -->
<property name="mappingResources">
<list>
<value>bscms3/monitorobjmng/domain/PropertyStatus.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- 指定使用方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</prop>
<!-- 是否在控制台输出sql语句 -->
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<!-- 解决查询中文乱码的问题 -->
<prop key="hibernate.query.factory_class">  
                    org.hibernate.hql.ast.ASTQueryTranslatorFactory  
                </prop>  
</props>
</property>
</bean>
<!-- 定义事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 定义事务管理拦截器 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义代理自动管理事务 -->
<bean id="ProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定需要Spring管理事务的Bean -->
<property name="beanNames">
<list>
</list>
</property>
<!-- 调用事务管理拦截器 -->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 依赖注入 -->

<bean id="propertyStatusAction" class="bscms3.strategymng.action.strategies.PropertyStatusAction">
<property name="propertyStatusService" ref="propertyStatusService" />
</bean>
<!-- service -->

<bean id="propertyStatusService" class="bscms3.monitorobjmng.service.impl.PropertyStatusServiceImpl">
<property name="propertyStatusDao" ref="propertyStatusDao"/>
</bean>
<!-- dao -->

<bean id="propertyStatusDao" class="bscms3.monitorobjmng.dao.impl.PropertyStatusDaoImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

</beans>

7.配置struts.xml
<action name="propertyStatus" class="propertyStatusAction" method="getData">
        <result>/jsp/strategymng/propertystatus.jsp</result>
        </action>

8.创建:propertystatus.jsp
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
   
    <title>My JSP 'propertystatus.jsp' starting page</title>
   

  </head>
 
  <body>
   
<table border="1" id="table11">
   <s:iterator id="data1" value="items" status="st1">
     <tr>
    <s:iterator id="data2" value="items[#st1.index]" status="st2">
     <td>
      <s:property value="data2"/>
     </td>
        </s:iterator> 
      </tr>
    </s:iterator> 
</table>   


  </body>
</html>

9.在浏览器中输入:http://localhost:8080/bscms3/propertyStatus.action?objectPropertyId=10054  结果如下:


  • 大小: 72.5 KB
  • 大小: 16.6 KB
  • 大小: 79.9 KB
0
0
分享到:
评论

相关推荐

    struts2 iterator标签遍历二维数组

    本文将深入探讨如何使用Struts2中的`&lt;s:iterator&gt;`标签来遍历二维数组,并通过实例代码来具体说明其用法。 ### Struts2 Iterator标签 #### 1. 基本概念 `&lt;s:iterator&gt;`是Struts2的一个非常强大的标签,主要用于...

    SSH1,JQuery的ajax返回json二维数组处理过程

    在本文中,我们将探讨如何使用SSH1框架与jQuery的AJAX功能来处理JSON二维数组,特别是在实现菜单联动下拉框的场景中。SSH1(Spring、Struts、Hibernate)是Java开发中的一个流行MVC框架组合,而jQuery的AJAX功能则...

    AJAX和struts2传递JSON数组

    在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...

    struts2接收数组参数demo

    亲自做了一个struts2后台接收前台jsp页面传来的数组参数demo,因为参考网上的资源如用webwork表单提交等集成到项目有问题,所以做了一个单独的demo,经测试,用表单提交类似users[0].name,users[1].name的数组参数是...

    struts2 实现oracle数据库的增删改查

    在本教程中,我们将深入探讨如何利用Struts2来实现对Oracle数据库的CRUD(创建、读取、更新和删除)操作。 首先,我们需要在项目中集成Struts2框架。这通常涉及到以下几个步骤: 1. 添加Struts2的核心库到项目的类...

    jquery的ajax传json对象数组到struts2的action

    本文将深入探讨如何使用jQuery的AJAX方法发送JSON对象数组到Struts2的Action,并在后端进行处理。 首先,我们了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    struts2操作数据库

    本资源主要关注Struts2如何与数据库进行交互,包括基本的CRUD(创建、读取、更新、删除)操作,分页显示数据,以及执行条件查询(模糊查询)。 首先,让我们深入了解一下Struts2是如何处理数据库操作的。Struts2...

    struts2+jdbc增删改查

    Struts2是一个强大的MVC(Model-View-Controller)框架,它在Java Web...通过这个项目,开发者可以学习到如何在Struts2框架下利用JDBC与数据库交互,同时掌握JSP页面和标签库的使用,从而提升对Java Web开发的理解。

    Struts2上传图片存数据库

    在本案例中,我们探讨的是如何利用Struts2框架处理文件上传,并将上传的图片以BLOB(Binary Large Object)类型存储在数据库中,同时提供下载功能。Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,...

    Struts 2连接数据库实现登陆

    这包括在项目的`web.xml`文件中添加Struts 2的核心过滤器,以及在`struts.xml`配置文件中定义Action和结果页面。Action是Struts 2中的业务逻辑载体,它将处理用户的请求,并与数据库进行交互。 接着,创建一个登录...

    struts2+jdbc实现图片的存储与显示(图片存储在数据库内)

    在本项目"struts2+jdbc实现图片的存储与显示(图片存储在数据库内)"中,我们将探讨如何结合这两个技术来处理图片数据,将图片存储到数据库内,并从数据库中检索以供显示。 首先,我们需要了解在数据库中存储图片的...

    Struts2用户登录实例(无数据库)

    总的来说,这个"Struts2用户登录实例(无数据库)"是一个很好的起点,可以帮助初学者理解Struts2的基本工作流程,以及如何在没有数据库的情况下实现用户登录功能。一旦掌握了这些基础,可以进一步探索如何整合数据库...

    struts2数据库常用操作

    在Struts2中实现数据库操作是常见的需求,包括查询、添加、修改和删除数据。以下将详细讲解如何在Struts2中进行这些基本操作。 1. **连接数据库** 在Struts2中,通常我们会创建一个数据库连接类,如`DBcon`,它...

    用struts2加hibernate对学员信息进行增删改查操作

    8. **页面跳转与数据传递**:在Struts2中,Action类的方法返回的结果名对应一个视图,如jsp页面,同时可以通过ActionContext或ModelDriven接口将数据传递到视图。页面之间的跳转和数据传递是Struts2的一大特点,简化...

    struts文图片上传 并存入数据库 在jsp页面显示

    在这个特定的项目中,我们看到的是一个关于如何使用Struts实现图片上传、存储到数据库以及在JSP页面显示的过程。以下是相关的知识点详解: 1. **Struts框架**:Struts是Apache软件基金会的一个开源项目,它提供了...

    struts2连接mysql数据库登录验证程序

    在这个“struts2连接mysql数据库登录验证程序”中,我们主要探讨以下几个关键知识点: 1. **Struts2框架**:Struts2作为MVC设计模式的实现,负责处理HTTP请求,通过Action类将用户请求映射到业务逻辑,并将结果传递...

    struts2对数据库的增删查改

    在本教程中,我们将深入探讨如何使用Struts2与SQL Server 2008数据库进行交互,实现数据的增删查改(CRUD:Create, Read, Update, Delete)操作。 首先,让我们从环境搭建开始。MyEclipse 7.0 是一个集成开发环境,...

    都市供求信息网-struts2架构的例程序(sqlserver数据库)

    都市供求信息网是一个基于Struts2架构开发的网站示例,它主要用于展示如何在实际项目中运用Struts2框架来构建动态、数据驱动的Web应用。Struts2是一个强大且灵活的MVC(Model-View-Controller)框架,它简化了Java ...

    基于Struts2的数据库操作及简单分页

    本项目聚焦于利用Struts2框架进行数据库操作以及实现简单的分页功能,同时也涉及到用户登录和查询、修改等基本操作。 首先,让我们深入理解Struts2的核心概念。Struts2框架通过Action类处理HTTP请求,每个Action类...

    连数据库的struts2例子

    在这个"连数据库的Struts2例子"中,我们将深入探讨如何使用Struts2与MySQL数据库进行交互,实现数据的添加和查询功能。 首先,我们需要确保环境准备就绪。这包括安装JDK、MySQL数据库、Struts2框架以及相关的开发...

Global site tag (gtag.js) - Google Analytics