Guest User

Untitled

a guest
Oct 1st, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. /*
  2. * Created on 26.05.2003
  3. *
  4. * To change the template for this generated file go to
  5. * Window>Preferences>Java>Code Generation>Code and Comments
  6. * $Id: DataDomBuilder.java,v 1.21 2004/02/05 09:27:55 rschumm Exp $
  7. */
  8. package ch.zhwin.jdbc2xml;
  9.  
  10.  
  11. import java.sql.Connection;
  12. import java.sql.DriverManager;
  13. import java.sql.ResultSet;
  14. import java.sql.ResultSetMetaData;
  15. import java.sql.SQLException;
  16. import java.sql.Statement;
  17. import javax.xml.parsers.DocumentBuilder;
  18. import javax.xml.parsers.DocumentBuilderFactory;
  19. import javax.xml.parsers.ParserConfigurationException;
  20. import javax.xml.transform.TransformerException;
  21. import org.w3c.dom.Document;
  22. import org.w3c.dom.Element;
  23.  
  24. /**
  25. * Fabriziert aus einer Datenbankabfrage ein DOM <p>
  26. *
  27. * Benützung der Klasse: <br>
  28. * <blockquote><pre>
  29. * DataDomBuilder builder = new DataDomBuilder(...);
  30. * builder.executeQuery("select...");
  31. * Document dom = builder.getDataDom();
  32. * String xml = builder.getDataDomAsString();
  33. * </pre></blockquote>
  34. *
  35. * @author rschumm
  36. *
  37. * jdbc2xml, $Date: 2004/02/05 09:27:55 $
  38. * (c) 2003 ZHW
  39. */
  40. public class DataDomBuilder {
  41. private Connection conn;
  42. private Document dataDoc = null;
  43.  
  44. private ResultSet res;
  45. private String dbUrl;
  46. private String user;
  47. private String password;
  48. private DocumentBuilder builder;
  49. private String driver;
  50.  
  51. /**
  52. * Konstruktor für Benutzung mit einer allgemeinen Datenbank.
  53. * @param driver Der fully qualified Classname des Datenank JDBC-Treibers.
  54. * @param dbUrl Die JDBC-URL.
  55. * @param user Der Datenbankuser bzw. leer
  56. * @param password Das dazugehörige Passwort bzw. leer
  57. * @throws ParserConfigurationException
  58. */
  59. public DataDomBuilder(String driver, String dbUrl, String user, String password)
  60. throws ParserConfigurationException {
  61.  
  62. this.dbUrl = dbUrl;
  63. this.user = user;
  64. this.password = password;
  65. this.driver = driver;
  66.  
  67. //DocumentBuilderFactory liefert einen neuen DocumentBuilder:
  68. //BEGINN Studenten-Code
  69. DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
  70. builder = fact.newDocumentBuilder();
  71. // ENDE Studenten-Code
  72. }
  73.  
  74. /**
  75. * Konstruktor für Benutzung mit der Beispiels-Access-Datenbank.
  76. */
  77. public DataDomBuilder() throws ParserConfigurationException {
  78. this("sun.jdbc.odbc.JdbcOdbcDriver", "jdbc:odbc:Studenten", "", "");
  79. }
  80.  
  81.  
  82. /**
  83. * Führt die Abfrage durch.
  84. * @param query Die SQL Abfrage.
  85. * @throws ClassNotFoundException Wenn die JDCB-Treiber nicht gefunden wurden.
  86. * @throws SQLException
  87. */
  88. public void executeQuery(String query) throws SQLException, ClassNotFoundException{
  89.  
  90. //stellt das dataDoc her:
  91. //BEGINN Studenten-Code
  92. dataDoc = builder.newDocument();
  93. Element dataRoot = dataDoc.createElement("rowset");
  94. // ENDE Studenten-Code
  95.  
  96. //Lädt den JDBC-Treiber:
  97. Class.forName(driver);
  98.  
  99. try {
  100. //Holt die Daten aus der Bank und verarbeitet sie:
  101.  
  102. conn = DriverManager.getConnection(dbUrl, user, password);
  103. Statement stat = conn.createStatement();
  104.  
  105. // BEGINN Studenten-Code
  106. res = stat.executeQuery(query);
  107.  
  108. //Beginn der Datenverarbeitung:
  109. ResultSetMetaData meta = res.getMetaData();
  110. int spalten = meta.getColumnCount();
  111. int rownr = 0;
  112. String s = null;
  113. while (res.next()) {
  114. //Fuer jede Zeile:
  115. Element row = dataDoc.createElement("row");
  116. rownr++;
  117. row.setAttribute("no", "" + rownr);
  118.  
  119. for (int i = 1; i <= spalten; i++) {
  120. //Fuer jede Spalte:
  121. Element datenspalte =
  122. dataDoc.createElement(
  123. meta.getColumnName(i).toLowerCase());
  124. //Hack fuer Bug in Access-ODBC-JDBC
  125. //liefert bei leeren Results null.
  126. s = res.getString(i);
  127. if (s == null)
  128. s = "";
  129. datenspalte.appendChild(dataDoc.createTextNode(s));
  130. row.appendChild(datenspalte);
  131. }
  132.  
  133. dataRoot.appendChild(row);
  134. }
  135.  
  136. dataDoc.appendChild(dataRoot);
  137.  
  138. // ENDE Studenten-Code
  139.  
  140. } catch (SQLException e) {
  141. throw new SQLException("Problem mit JDBC: " + e.toString());
  142.  
  143. } finally {
  144. try {
  145. if (conn != null) conn.close();
  146. } catch (Exception e2) {
  147. throw new SQLException(
  148. "Problem beim Schliessen der SQL-Verbindung: "
  149. + e2.toString());
  150. }
  151. }
  152.  
  153.  
  154.  
  155. }
  156.  
  157.  
  158. /**
  159. * @return Liefert das Ergebnis der Abfrage als DOM.
  160. */
  161. public Document getDataDom(){
  162. return dataDoc;
  163. }
  164.  
  165. /**
  166. * @return Liefert das Ergebnis der Abfrage als (XML-)String.
  167. * @throws TransformerException
  168. */
  169. public String getDataDomAsString() throws TransformerException {
  170. return XSLTHelper.domToString(dataDoc);
  171. }
  172.  
  173. /**
  174. * Zum Testen.
  175. * @param args
  176. * @throws Exception
  177. */
  178. public static void main(String[] args) throws Exception {
  179. DataDomBuilder b =
  180. new DataDomBuilder();
  181. b.executeQuery("select * from studenten");
  182.  
  183. System.out.println(b.getDataDomAsString());
  184.  
  185. }
  186.  
  187.  
  188. }
Add Comment
Please, Sign In to add comment