使用DOM和XSL来格式化由Java提取的数据
2008-02-23 08:11:27来源:互联网 阅读 ()
生成DOM文档
Java的最新版本支持JAXP XML处理,并实现了由万维网协会(W3C)定义的DOM API。使用这些相容于JAXP的版本,只需3行代码即可创建一个DOM文档对象,其中用到了JAXP factory和builder方法:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.newDocument();
我们创建一个名为resultset的根元素,并把它添加到文档对象中
Element root = document.createElement("resultset");
document.appendChild(root);
resultset游标遍历结果集时,在根元素中添加包含行数据的一个新元素:
Element nextRow = document.createElement("row");
列计数必须从ResultSetMetaData对象中读取;在本项目的数据库数据提取阶段,它必须是已经定义好的:
int columnCount = rsmd.getColumnCount();
列名要用for循环来检索;针对每个列名,都添加一个name节点,它带有一个子TextNode,其中包含用于一个names元素的名值:
String[] columnNames = new String[columnCount];
Element names = document.createElement("names");
for (int i = 0; i 〈 columnCount; i ){
/* the first column is 1, the second is 2, ... */
columnNames[i] = rsmd.getColumnName(i 1);
Element nextNameNode = document.createElement("name");
Text nextName = document.createTextNode(columnNames[i]);
nextNameNode.appendChild(nextName);
names.appendChild(nextNameNode);
}
列索引从1开始,而非从0开始。读取每个数据行时,列值都在一个for循环中作为字符串来泛化地检索,这个for循环将读取每一个列值:
/* Move the cursor through the data one row at a time. */
while(resultSet.next()){
/* Create an Element node for each row of data. */
Element nextRow = document.createElement("row");
if (debug) System.out.println("new row");
for (int i = 0; i 〈 columnCount; i ){
/* Create an Element node for each column value. */
Element nextNode = document.createElement(columnNames[i]);
/* the first column is 1, the second is 2, ... */
/* getString() will retrieve any of the basic SQL types*/
Text text = document.createTextNode(resultSet.getString(i 1));
nextNode.appendChild(text);
nextRow.appendChild(nextNode);
}
root.appendChild(nextRow);
}
所有数据都转换到一个DOM文档对象中之后,连接就可关闭。DataBaseHandler永远不需要进行文件操作。XML文档是在内存中创建的。
一个具体的DataBaseHandler对象
使用少数几行代码,即可构造一个泛化的DefaultDataBaseHandler:
public class DefaultDataBaseHandler extends AbstractDataBaseHandler{
public DefaultDataBaseHandler(String urlString, String userName,
String password, String driverName){
setUrlString(urlString);
setUserName(userName);
setPassword(password);
setDriverName(driverName);
}
}
OracleDataBase处理程序稍微有点儿复杂:
public class OracleDataBaseHandler extends AbstractDataBaseHandler{
private String thinOraclePrefix = "jdbc:oracle:thin:@";
private String urlString;
private String userName;
private String password;
private String driverName = "oracle.jdbc.OracleDriver";
private String host;
private String port;
private String sid;
public OracleDataBaseHandler(String host, String sid,
String userName, String password){
this.host = host;
this.sid = sid;
/* a valid url connection string format is: "host:port:sid" */
setUrlString(thinOraclePrefix host ":1521:" sid);
setUserName(userName);
setPassword(password);
}
public OracleDataBaseHandler(String host, String port, String sid,
String userName, String password){
this.host = host;
this.sid = sid;
this.port = port;
/* a valid url connection string format is: "host:port:sid" */
setUrlString(thinOraclePrefix host ":" port ":" sid);
setUserName(userName);
setPassword(password);
}
}
ODBCDataBaseHandler区别不大,只是它处理的是数据源名称(DSN),而非主机名称、端口和SID。之所以要使用与Oracle数据库有关的主机名称、端口号和SID,是因为我们处理的是一个数据库服务器,而不是一个数据库文件。但是,Microsoft Access关系数据库要使用.mdb文件:
public class ODBCDataBaseHandler extends AbstractDataBaseHandler{
private String urlString;
private String userName;
private String password;
private String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
private String dsn;
private String odbcPrefix = "jdbc:odbc:";
public ODBCDataBaseHandler(String dsn, String userName, String password){
/* a valid url connection string format is: "jdbc:odbc:dsn" */
this.dsn = dsn;
setUrlString(odbcPrefix dsn);
setUserName(userName);
setPassword(password);
setDriverName(driverName);
}
}
要了解访问一种特定数据库的细节,请查阅产品文档。你需要用另一个类来调用一个具体的DataBaseHandler,并进行XSL转换,从而将数据库结果转换成一种有用的替代输出类型。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash