网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用jdom技术将数据库数据写入读出xml文件     
  文章作者:未知  文章来源:水木森林  
  查看:122次  录入:管理员--2007-11-17  
 
  //很多时候,为了避免多次访问/查询数据库重的数据或者便于察看,将需要的数据一次取出并写入xml文件

//通过查询条件m_condition 按照xmlmappath的模式/模板 将从库中的数据写到resultxml
//并返回记录条数

public int writexml(string m_condtion,string xmlmappath,string resultxml){
int recordnum=0;
string tablename = "table";
string tablecol = "*";
string sql = "select " + tablecol + " from " + tablename + " where " + m_condtion;

document mapdoc = null;
document datadoc = null;
document newdoc = null;
//开始准备工作
try {
documentbuilderfactory dbfactory = documentbuilderfactory.newinstance();
//create the documentbuilder
documentbuilder docbuilder = dbfactory.newdocumentbuilder();
//parse the file to create the document
mapdoc = docbuilder.parse(xmlmappath);

datadoc = docbuilder.newdocument();
//instantiate the new document
newdoc = docbuilder.newdocument();
} catch (exception e) {
system.out.println(e.getmassege());
}

//开始读取映射作用的template文件

element maproot = mapdoc.getdocumentelement();
node datanode = maproot.getelementsbytagname("data").item(0);
element dataelement = (element)datanode;

//create a new element called "data"
element dataroot = datadoc.createelement("data");

try {
/******** 这里创建一个连接conn,并创建statement
根据不同的数据源创建
********************************/
resultset resultset = stmt.query(sql);
//get the resultset information
resultsetmetadata resultmetadata = resultset.getmetadata();
int numcols = resultmetadata.getcolumncount();
log.write("db_to_xml:numcols:" + numcols);

while (resultset.next()) {
//create a new element called "row"
element rowel = datadoc.createelement("row");

//为了便于浏览和读,创建列数,以id为标记
string colname = "id";
string colval =integer.tostring(++recordnum);
element datael = datadoc.createelement(colname);
datael.appendchild(datadoc.createtextnode(colval));

rowel.appendchild(datael);
for (int i=1; i <= numcols; i++) {

colname = resultmetadata.getcolumnname(i);
//get the column value
colval = resultset.getstring(i);

//determine if the last column accessed was null
if (resultset.wasnull()) {
colval = "";
}

datael = datadoc.createelement(colname);

datael.appendchild(datadoc.createtextnode(colval));

rowel.appendchild(datael);
}
//add the row to the root element
dataroot.appendchild(rowel);
}
} catch (exception e) {
log.write(e.getmessage());
} finally {
log.write(" db_to_xml: closing connections...");

}

//add the root element to the document
datadoc.appendchild(dataroot);

node node1= maproot.getelementsbytagname("root").item(0);
element newrootinfo =(element)node1;
log.write("after got newrootinfo ...");
//retrieve the root and row information

string newrootname = newrootinfo.getattribute("name");

string newrowname= newrootinfo.getattribute("rowname");

nodelist newnodesmap = maproot.getelementsbytagname("element");

//create the final root element with the name from the mapping file
element newrootelement=null;

newrootelement = newdoc.createelement(newrootname);

nodelist oldrows = dataroot.getelementsbytagname("row");
for (int i=0; i < oldrows.getlength(); i++){

//retrieve each row in turn
element thisrow = (element)oldrows.item(i);

//create the new row
element newrow = newdoc.createelement(newrowname);

for (int j=0; j < newnodesmap.getlength(); j++) {

//for each node in the new mapping, retrieve the information
//first the new information...
element thiselement = (element)newnodesmap.item(j);
string newelementname = thiselement.getattribute("name");

//then the old information
element oldelement = (element)thiselement.getelementsbytagname("content").item(0);
string oldfield = oldelement.getfirstchild().getnodevalue();

//get the original values based on the mapping information
element oldvalueelement = (element)thisrow.getelementsbytagname(oldfield).item(0);
string oldvalue = oldvalueelement.getfirstchild().getnodevalue();

element newelement = newdoc.createelement(newelementname);
newelement.appendchild(newdoc.createtextnode(oldvalue));

nodelist newattributes = thiselement.getelementsbytagname("attribute");
for (int k=0; k < newattributes.getlength(); k++) {
//get the mapping information
element thisattribute = (element)newattributes.item(k);
string oldattributefield = thisattribute.getfirstchild().getnodevalue();
string newattributename = thisattribute.getattribute("name");

oldvalueelement = (element)thisrow.getelementsbytagname(oldattributefield).item(0);
string oldattributevalue = oldvalueelement.getfirstchild().getnodevalue();

newelement.setattribute(newattributename, oldattributevalue);
}

//add the new element to the new row
newrow.appendchild(newelement);
}
//add the new row to the root
newrootelement.appendchild(newrow);
}
//add the new root to the document
newdoc.appendchild(newrootelement);

//把生成的xml文档(newdoc)写到文件中(路径名为resultxml)
try{
transformerfactory tfactory = transformerfactory.newinstance();
transformer transformer = tfactory.newtransformer();
properties properties = transformer.getoutputproperties();
properties.setproperty(outputkeys.encoding, "gb2312");//iso8859_1,gb2312,utf-8
properties.setproperty(outputkeys.method, "xml");
properties.setproperty(outputkeys.version, "1.0");
properties.setproperty(outputkeys.indent, "yes");
transformer.setoutputproperties(properties);

domsource source = new domsource(newdoc);

streamresult result = new streamresult(new java.io.file(resultxml));

transformer.transform(source, result);
//生成xml文件 完成
} catch (exception e) {
system.out.println("xml file write:"+e.getmessage());
}
return recordnum;
}
 
 
上一篇: 邂逅stringindexoutofboundsexception    下一篇: 用jdom简化xml编程
  相关文档
grails + ejb domain models 11-17
图象淡出效果 11-17
初学者入门java的xml编程实例解析 11-17
参数上溯造型解决了错误的方法调用 11-17
实用系统的架构主选:可伸缩性和重/轻量 11-17
struts原理、开发及项目实施 11-17
java经验谈:尽可能使用堆栈变量 11-16
专访java之父:java未来的发展 11-17
深入spring mvc framework之总体分析 11-17
利用视图链接使Eclipse应用程序更丰富 03-25
125条常见的java面试笔试题大汇总 11-17
java servlet基本方法介绍 java servlet api 11-16
applet与servlet通讯 (片段源码) 11-17
你知道如何才算掌握java(j2ee篇)吗? 11-17
java新手必看-hello world 攻略 11-16
针对java移动设备的3d图形第1部分:m3g 的立即模式 11-17
Java XML编程实例解析 08-07
jsp+tomcat+mysql&sevlet&javabean配置全过程 11-17
java认证的目的,题目方式和步骤 11-17
4. building controller components 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息