知识大全 ALDSP中动态数据表访问的解决方案
Posted 函数
篇首语:人往大处看,鸟往高处飞。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ALDSP中动态数据表访问的解决方案相关的知识,希望对你有一定的参考价值。
ALDSP中动态数据表访问的解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
不少系统中都有动态数据表的存在 比如按日或者按月在数据库中生成一个表 以日表为例 其表名的形式为TableName_XXXX_XX_XX 如TableName_ _ _ 等 表明其表内数据存放的是 年 月 日所产生的数据 在这些日表中 表结构完全相同 只是在表名上有所区别
而在ALDSP从关系数据库中导入元数据(import Meta Data)时 无论是直接从表导入 还是从SQL语句导入 都必须提供其表名 否则无法生成Data Services 但是在不少客户的应用中 经常是要根据选择的时间范围来动态的查询一个表或者多个表 根据客户提出的这些要求 经过研究发现 在ALDSP中要比较方便的解决这个问题 主要可以通过两个途径解决 其一是在数据库端生成一个函数(function)或者存储过程(store procedure) 设定表名作为参数 然后由ALDSP导入生成Data Services 其二是直接利用ALDSP可以从函数导入元数据的功能 先生成一个以表名为参数的函数 然后导入ALDSP生成Data Services
以下主要介绍第二种方法的实现
在ALDSP中 可以从多种异构数据源中取得数据 包括数据库 flatfile xml文件 Web Services Java函数等 从Java函数中生成Data Services有几点要注意的地方 详见其中包括函数的定义必须为static 还有就是返回值有些限制 主要可以返回两种类型 其一为Java原始类型(primitive types)或者原始类型的数组 其二为复杂类型(plex types)或者复杂类型的数组 在一般的Java程序中 返回复杂类型数据一般会用到JavaBean或者JavaBean的数组或者直接用一个容器返回 但是对ALDSP而言 无论是容器或者JavaBean的数据 ALDSP均不能从中获取到所需的元数据(Meta Data)信息 要满足ALDSP元数据获取的要求 我们可以通过一个Java to XML或者JavaBena的技术来对其返回值进行封装
针对以上这些情况 我们通过一个模拟的例子来实现这个解决方案 首先在数据库中生成两张表表名为table 和table 结构如下
字段名 类型 ID 字符串型 NAME 字符串型 根据表的类型 设计XMLBean的XML Schema来适应我们的需要
以下为图形化视图(由XMLSPY生成)
XML文件源代码如下
<?xml version= ?> <xs schema xmlns xs= xmlns tns= targetNamespace= elementFormDefault= qualified attributeFormDefault= unqualified > <xs element name= AllUser > <xs plexType> <xs sequence> <xs element name= User minOccurs= maxOccurs= unbounded > <xs plexType> <xs sequence> <xs element name= ID type= xs string /> <xs element name= Name type= xs string /> </xs sequence> </xs plexType> </xs element> </xs sequence> </xs plexType> </xs element> </xs schema>然在在Workshop里新建一个应用程序 再新建一个Schema Project 再新建一个XML Schema如下所示
保存AllUser xsd后会自动编译成生XMLBean的包
这样 我们就可以在定义的Java类中返回XMLBean类型的数据了
接下来在当前应用程序中新建一个Java工程 加一个Java类 生成一个类如下
import java sql Connection import java sql Driver import java sql ResultSet import java sql Statement import java util Hashtable import javax naming Context import javax naming InitialContext import javax sql DataSource import openuri temp testDynamicTable allUser AllUserDocument
public class DynamicTable //函数的函数为表名public static AllUserDocument getUser(String tablename)
AllUserDocument doc AllUserDocument AllUser alluser AllUserDocument AllUser User user //先生成一个XMLBean的实例doc = AllUserDocument Factory newInstance() //像这个实例中加入一个节点alluser = doc addNewAllUser() try Hashtable env = new Hashtable() Context ctx = null ctx = new InitialContext() DataSource ds = (DataSource)ctx lookup( cgDataSource ) Connection conn = ds getConnection() Statement stmt = conn createStatement() ResultSet rs = stmt executeQuery( select id name from +tablename) //通过JDBC取得数据集ResultSet while(rs next())
//然后将数据集中的数据加入到XMLBean中user = alluser addNewUser() user setID(rs getString( id )) user setName(rs getString( name )) System out println(doc toString()) catch(Exception ex)
ex printStackTrace() //将结果集包装为XMLBean后返回return doc 以上代码的主要原理是 通过JNDI取得数据源 然后使用根据传入的表名拼装出一个SQL查询语句 然后由取得结果集后生成XMLBean返回
经过编译后就可以导入生成一个Data Services了
最后测试结果如下
cha138/Article/program/Java/hx/201311/26163
相关参考
访问IIS元数据库失败的解决 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 近日调试一Aspne
在公共新闻组中一个经常出现的问题是怎样才能根据传递给存储过程的参数返回一个排序的输出?在一些高水平专家的帮助之下我整理出了这个问题的几种解决方案 一用IFELSE执行预先编写好的查询 对于大多
应用场景 项目中往往需要动态的创建一个表单或者添加一个新的数据模板这时候因为需要在运行时动态的创建表以及动态的维护表字段甚至表关系使得普通java解决方案变得困难重重 实现工具 Hibern
CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据
CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据。_____答案:错误解析:CPU只能直接访问内存中的数据,外存中的数据必须调人内存后,才能被访问。故本题判断错误。
——此文章摘自《ASPNET网络数据库开发实例精解》定价¥特价¥详细>>//tracklinktechcn/?m_id=dangdang&a
——此文章摘自《ASPNET网络数据库开发实例精解》定价¥特价¥详细>>//tracklinktechcn/?m_id=dangdang&a
在VisualC#中访问不同数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! visualC
ASP.NET2.0中数据源控件之异步数据访问 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
在JSP中访问数据库大全 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在有好多初学jsp的网
在JSP中访问各种数据库[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现在有好多初学js