标题: 关于分割表的研究问题,就是xml同时查多数据的问题 [打印本页]
作者: cnjiexie12 时间: 2010-7-29 16:13 标题: 关于分割表的研究问题,就是xml同时查多数据的问题
我对你们之前发布的xml例子进行研究,发现有些XML表能够对多个数据库进行查询和显示,我在这个基础上尝试做了一张风格表,因为不知为何不能贴图了,直接传xml文件[attach]291[/attach].
之后我又想,能否直接用后台的代码直接查,但我能成功删掉普通的XML表的的<Reader>,<Connection>,<Tagname> 标签移到后台查数据库,但发现只能实现只查但数据库的XML模板,如果涉及到风格表这样的多数据表,我该怎么将查数据的功能放入后台,毕竟是多数据源,以前没接触这么复杂的(主要想尝试将XML模板在后台接入更庞大的oracle数据库查更复杂的数据,看能否实现。)
版主你会怎么构思呢。。。。。期待
[ 本帖最后由 cnjiexie12 于 2010-7-29 16:46 编辑 ]
作者: cnjiexie12 时间: 2010-7-29 17:26
原本我以为,读XML时是通过Util.java对每一个标签进行读取然后通过
public static void setValue(Object obj, String prop, Object newValue, Class valueType) {
Class c = obj.getClass();
Method setter = null;
try {
setter = c.getMethod("set" + prop, new Class[] { valueType });
} catch (SecurityException ex) {
ex.printStackTrace();
} catch (NoSuchMethodException ex) {
ex.printStackTrace();
}
try {
setter.invoke(obj, new Object[] { newValue });
} catch (InvocationTargetException ex) {
ex.printStackTrace();
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
的反射机制进行对各个标签的set+name的方法,
所以我想直接将读数据库标签的SET给手动加上,然后删掉XML表上,例如(期间还有其他方法的添加,编译无错误,但是执行时还是没把数据注入)
jatools.dom.src.DatasetNodeSource dns = new jatools.dom.src.DatasetNodeSource();
jatools.data.reader.sql.SqlReader sr = new jatools.data.reader.sql.SqlReader();
sr.setSql("SELECT * FROM 订单查询");
sr.setConn(getConnection33());
sr.setName("订单明细");
dns.setReader((jatools.data.reader.DatasetReader)sr);
dns.setTagName("RESULT_0");
作者: cnjiexie12 时间: 2010-7-29 17:27
难道我的想法太幼稚了,杰表太复杂了
作者: admin 时间: 2010-7-29 22:41
运行时替换,应该这样复制内容到剪贴板
代码:
ReportJob job = new ReportJob(new FileInputStream("d:/a.xml"));
DatasetNodeSource dns = job.getDocument().getNodeSource().getNodeSourceByTagName("学生表");
SqlReader sr = new SqlReader();
sr.setSql("SELECT * FROM 订单查询");
sr.setConn(getConnection33());
sr.setName("订单明细");
dns.setReader((jatools.data.reader.DatasetReader)sr);
//dns.setTagName("RESULT_0");
job.printAsXLS(new FileOutputStream("d:/a.xls"));
作者: cnjiexie12 时间: 2010-7-30 11:26
根据版主的思路与我昨晚的思考(其实我已经接近了,主要是没考虑到更高的根节点<NodeSource> 的也要set标签。因此做出调整,在UTIL.JAVAL里加入 jatools.dom.src.DatasetNodeSource ns = (jatools.dom.src.DatasetNodeSource) jatools.ReportDocument.nodeSource.getChildren().get(0);
SqlReader sr= (SqlReader) ns.getReader(); //进行根部连接
然后调用我自己设置的SetMsg方法(方便对应不同的表进行连接操作)
SetMsg sm= new SetMsg();
sm.setFGB();再读也没问题了,也能解决多数据库的后台问题。。
作者: cnjiexie12 时间: 2010-7-30 11:27
附上自定义的代码:
package jatools.util;
public class SetMsg {
/**
* 分割表
*/
public static void setFGB(){
jatools.dom.src.RootNodeSource rsa = (jatools.dom.src.RootNodeSource)jatools.ReportDocument.nodeSource;
jatools.dom.src.DatasetNodeSource dns = (jatools.dom.src.DatasetNodeSource) rsa.getChildren().get(0);
jatools.dom.src.DatasetNodeSource dns1 = (jatools.dom.src.DatasetNodeSource) rsa.getChildren().get(1);
jatools.data.reader.sql.SqlReader sr = new jatools.data.reader.sql.SqlReader();
String driver = "org.hsqldb.jdbcDriver";
String url = "jdbc:hsqldb:C:/demosdb/mydb";
String user = "sa";
String password = "";
sr.setSql("select top 5 * from 订单查询");
sr.setConnection(new jatools.data.reader.sql.Connection(driver, url, user, password));
sr.setName("订单查询");
dns.setReader((jatools.data.reader.DatasetReader)sr);
dns.setTagName("result_0");
jatools.data.reader.sql.SqlReader sr2 = new jatools.data.reader.sql.SqlReader();
sr2.setSql("select top 5 * from 供应商");
sr2.setConnection(new jatools.data.reader.sql.Connection(driver, url, user, password));
sr2.setName("供应商");
dns1.setReader((jatools.data.reader.DatasetReader)sr2);
dns1.setTagName("result_1");
}
/**
* 分栏报表
*/
public static void setFL(){
jatools.dom.src.RootNodeSource rsa = (jatools.dom.src.RootNodeSource)jatools.ReportDocument.nodeSource;
jatools.dom.src.DatasetNodeSource dns = (jatools.dom.src.DatasetNodeSource) rsa.getChildren().get(0);
jatools.data.reader.sql.SqlReader sr = new jatools.data.reader.sql.SqlReader();
String driver = "org.hsqldb.jdbcDriver";
String url = "jdbc:hsqldb:C:/demosdb/mydb";
String user = "sa";
String password = "";
sr.setSql("SELECT 订单明细.订单ID,订单明细.单价,订单明细.数量,订单明细.折扣,产品.产品名称 FROM 订单明细,产品 where 订单明细.产品ID =产品.产品ID");
sr.setConnection(new jatools.data.reader.sql.Connection(driver, url, user, password));
sr.setName("订单明细");
dns.setReader((jatools.data.reader.DatasetReader)sr);
dns.setTagName("订单明细");
}
}
作者: cnjiexie12 时间: 2010-7-30 11:29
感谢版主 每次都及时地给于帮助 ,也倾囊相教 ,再次谢谢杰表小组将这么好的程序开源,对于我们交流以及提高有很大的作用,最后,杰表还是很强大,可想在这个基础上进行更复杂的功能编制的可能性。
作者: cnjiexie12 时间: 2010-7-30 11:35
加入 jatools.dom.src.DatasetNodeSource ns = (jatools.dom.src.DatasetNodeSource) jatools.ReportDocument.nodeSource.getChildren().get(0);
SqlReader sr= (SqlReader) ns.getReader(); //进行根部连接
然后调用我自己设置的SetMsg方法(方便对应不同的表进行连接操作)
SetMsg sm= new SetMsg();
sm.setFGB();再读也没问题了,也能解决多数据库的后台问题。。
其实是废话
就调用 SetMsg sm= new SetMsg();
sm.setFGB();就可以
欢迎光临 杰表技术论坛 (http://bbs.jatools.com/) |
Powered by Discuz! 6.1.0 |