当前位置: 代码迷 >> Sql Server >> 水晶易表—JSP—数据库解决办法
  详细解决方案

水晶易表—JSP—数据库解决办法

热度:61   发布时间:2016-04-27 17:10:58.0
水晶易表—JSP—数据库
水晶易表毕竟是做报表的,离开数据库它是飞不远的。从目前的版本来看,易表连接数据库虽然有好几种方式,但都比较麻烦,而且还有很多局限性。其中通过xml方式连接数据库还算比较灵活,我要说的就是这种方式。

在易表的数据管理里新建一个xml数据连接,XML Data URL这里填xml的地址,既可以是本机地址也可以是网络地址,左边的框里是易表传给xml的数据,右边是易表接收xml的数据。

我让易表把年月、税务机关、状态这三个参数传给xml,然后xml用这三个参数查询数据库,把查出的数据再传给易表。

 
那么关键是这个xml怎么接收数据,怎么查数据库呢?

我来告诉你吧(呵呵,我有种讲课的感觉。),这个xml是不存在的,是让JSP生成的。

因为全是Java代码,所以我没写JSP,直接写了个servlet。废话少说,上代码:


Java code
    /**     * 与水晶易表进行交互     * 这个方法你可以看做是servlet的doPost方法。     */    public void getXcelsiusData(HttpServletRequest request,           HttpServletResponse response, IErrorHandler errorHandler,           IMessageHandler messageHandler, ViewHelper viewHelper)           throws IOException, LiteJdbcException {       // 接收水晶易表数据:       // 这些数据一般作为参数用,当然也可以看做表单(flash表单,酷吧)提交。       // 水晶易表发送过来的数据是xml格式的,我没有想到更好的办法获取这些数据,       // 而是把它们当做字符串来处理的,它的层次结构是data/variable/row/column        // 大概是这段字符串后面是个等于号,这样竟把后面的所有的内容取了出来       String strData = request.getParameter("<data><variable name");       // 我打算把易表传过来的数据放到map里面,格式为<String,String[]>,       // key存放variable的名称,value存放这个variable里面包含的column       Map map = new HashMap();       // 根据这段xml字符串的格式特征,我对它进行了解剖,把有用的数据放到了map里面。       // 正式因为易表传过来的xml格式是固定的我才能这样做。       String[] strVariables = strData.split("<variable name=");       for (int i = 0; i < strVariables.length; i++) {           // 取variable值           int pos1 = strVariables[i].indexOf("\">");           String var = strVariables[i].substring(1, pos1);           // 取column值           String[] strColumns = strVariables[i].split("</column>");           String[] cols = new String[strColumns.length - 1];           for (int j = 0; j < strColumns.length - 1; j++) {              int pos2 = strColumns[j].indexOf("<column>");              cols[j] = strColumns[j].substring(pos2 + "<column>".length());           }           map.put(var, cols);       }       // 下面把数据取出来打印一下看看       System.out.println("variable共有" + map.size() + "个,分别是:");       Iterator it = map.keySet().iterator();       while (it.hasNext()) {           String key = (String) it.next();           String[] values = (String[]) map.get(key);           System.out.print(key + " = ");           for (int i = 0; i < values.length; i++) {              System.out.print(i == values.length - 1 ? values[i] : values[i] + ",");           }           System.out.println();       }       // 数据就接收完了,根据你的需要,可以把它们存到数据库,或者用在下面作为查询数据库的参数       // -------        // 给水晶易表发送数据:       // 这里就是组成一个xml格式的字符串,里面的数据就随便你从哪取了。       // 我这里为了方便使用静态的数据,查数据库我想大家都会我就不献丑了。       StringBuffer xml = new StringBuffer();       xml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");       xml.append("<data>");       xml.append("<variable name=\"aa\">");       xml.append("<row>");       xml.append("<column>").append("lo").append("</column>");        xml.append("<column>").append("da").append("</column>");       xml.append("<column>").append("chi").append("</column>");       xml.append("</row>");       xml.append("</variable>");       xml.append("</data>");       // 把这段字符串打印在页面上,那么这个页面就是xml格式的了。       response.getWriter().println(xml);    }
虽然我写的代码很长,但其实很简单,也许还有更简单的办法,如果您知道请告诉我,另外必须告诉您,我还远远算不上是高手,研究出这点东西就很洋洋得意了,毕竟用水晶易表的太少了,而认真研究过的就更少了。

好了,写好代码以后,把它发布在应用服务器上,把这个方法的网络地址填在易表的XML Data URL那里,设置好输入输出数据的位置,就可以了,你自己试一试吧。




------解决方案--------------------
  相关解决方案