Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Created on 26.05.2003
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- * $Id: DataDomBuilder.java,v 1.21 2004/02/05 09:27:55 rschumm Exp $
- */
- package ch.zhwin.jdbc2xml;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.sql.Statement;
- import javax.xml.parsers.DocumentBuilder;
- import javax.xml.parsers.DocumentBuilderFactory;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.transform.TransformerException;
- import org.w3c.dom.Document;
- import org.w3c.dom.Element;
- /**
- * Fabriziert aus einer Datenbankabfrage ein DOM <p>
- *
- * Benützung der Klasse: <br>
- * <blockquote><pre>
- * DataDomBuilder builder = new DataDomBuilder(...);
- * builder.executeQuery("select...");
- * Document dom = builder.getDataDom();
- * String xml = builder.getDataDomAsString();
- * </pre></blockquote>
- *
- * @author rschumm
- *
- * jdbc2xml, $Date: 2004/02/05 09:27:55 $
- * (c) 2003 ZHW
- */
- public class DataDomBuilder {
- private Connection conn;
- private Document dataDoc = null;
- private ResultSet res;
- private String dbUrl;
- private String user;
- private String password;
- private DocumentBuilder builder;
- private String driver;
- /**
- * Konstruktor für Benutzung mit einer allgemeinen Datenbank.
- * @param driver Der fully qualified Classname des Datenank JDBC-Treibers.
- * @param dbUrl Die JDBC-URL.
- * @param user Der Datenbankuser bzw. leer
- * @param password Das dazugehörige Passwort bzw. leer
- * @throws ParserConfigurationException
- */
- public DataDomBuilder(String driver, String dbUrl, String user, String password)
- throws ParserConfigurationException {
- this.dbUrl = dbUrl;
- this.user = user;
- this.password = password;
- this.driver = driver;
- //DocumentBuilderFactory liefert einen neuen DocumentBuilder:
- //BEGINN Studenten-Code
- DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
- builder = fact.newDocumentBuilder();
- // ENDE Studenten-Code
- }
- /**
- * Konstruktor für Benutzung mit der Beispiels-Access-Datenbank.
- */
- public DataDomBuilder() throws ParserConfigurationException {
- this("sun.jdbc.odbc.JdbcOdbcDriver", "jdbc:odbc:Studenten", "", "");
- }
- /**
- * Führt die Abfrage durch.
- * @param query Die SQL Abfrage.
- * @throws ClassNotFoundException Wenn die JDCB-Treiber nicht gefunden wurden.
- * @throws SQLException
- */
- public void executeQuery(String query) throws SQLException, ClassNotFoundException{
- //stellt das dataDoc her:
- //BEGINN Studenten-Code
- dataDoc = builder.newDocument();
- Element dataRoot = dataDoc.createElement("rowset");
- // ENDE Studenten-Code
- //Lädt den JDBC-Treiber:
- Class.forName(driver);
- try {
- //Holt die Daten aus der Bank und verarbeitet sie:
- conn = DriverManager.getConnection(dbUrl, user, password);
- Statement stat = conn.createStatement();
- // BEGINN Studenten-Code
- res = stat.executeQuery(query);
- //Beginn der Datenverarbeitung:
- ResultSetMetaData meta = res.getMetaData();
- int spalten = meta.getColumnCount();
- int rownr = 0;
- String s = null;
- while (res.next()) {
- //Fuer jede Zeile:
- Element row = dataDoc.createElement("row");
- rownr++;
- row.setAttribute("no", "" + rownr);
- for (int i = 1; i <= spalten; i++) {
- //Fuer jede Spalte:
- Element datenspalte =
- dataDoc.createElement(
- meta.getColumnName(i).toLowerCase());
- //Hack fuer Bug in Access-ODBC-JDBC
- //liefert bei leeren Results null.
- s = res.getString(i);
- if (s == null)
- s = "";
- datenspalte.appendChild(dataDoc.createTextNode(s));
- row.appendChild(datenspalte);
- }
- dataRoot.appendChild(row);
- }
- dataDoc.appendChild(dataRoot);
- // ENDE Studenten-Code
- } catch (SQLException e) {
- throw new SQLException("Problem mit JDBC: " + e.toString());
- } finally {
- try {
- if (conn != null) conn.close();
- } catch (Exception e2) {
- throw new SQLException(
- "Problem beim Schliessen der SQL-Verbindung: "
- + e2.toString());
- }
- }
- }
- /**
- * @return Liefert das Ergebnis der Abfrage als DOM.
- */
- public Document getDataDom(){
- return dataDoc;
- }
- /**
- * @return Liefert das Ergebnis der Abfrage als (XML-)String.
- * @throws TransformerException
- */
- public String getDataDomAsString() throws TransformerException {
- return XSLTHelper.domToString(dataDoc);
- }
- /**
- * Zum Testen.
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- DataDomBuilder b =
- new DataDomBuilder();
- b.executeQuery("select * from studenten");
- System.out.println(b.getDataDomAsString());
- }
- }
Add Comment
Please, Sign In to add comment