Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.72 KB | None | 0 0
  1. package vvm;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7. import java.sql.Statement;
  8. import java.time.LocalDateTime;
  9. import java.sql.DatabaseMetaData;
  10. import java.sql.ResultSetMetaData;
  11. import java.io.BufferedReader;
  12. import java.io.BufferedWriter;
  13. import java.io.FileOutputStream;
  14. import java.io.FileReader;
  15. import java.io.IOException;
  16. import java.io.OutputStreamWriter;
  17.  
  18. public class XmlExporter {
  19. /*
  20. * URL Format: jdbc:oracle:thin:@<server>:<port>:<instance> URL Example:
  21. * jdbc:oracle:thin:@localhost:1521:chanda Driver Class:
  22. * oracle.jdbc.driver.OracleDriver
  23. *
  24. * URL Format: jdbc:db2://<server>:<port>/<database>?<props> URL Example:
  25. * jdbc:db2://localhost:50000/chandaDB Driver Class: com.ibm.db2.jcc.DB2Driver
  26. *
  27. * jdbc:postgresql:database jdbc:postgresql:/ jdbc:postgresql://host/database
  28. * jdbc:postgresql://host/ jdbc:postgresql://host:port/database
  29. * jdbc:postgresql://host:port/ org.postgresql.Driver
  30. */
  31.  
  32. public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException {
  33. // Параметры
  34. // [0]Имя класса: com.ibm.db2.jcc.DB2Driver
  35. // [1]URL базы: jdbc:db2://orochi.utair.dom:50000/tickproc
  36. // [2]Имя юзера:
  37. // [3]Пароль:
  38. // [4]Схема:
  39. // [5]Имя файла с SQL-запросом: res\\someQuery.sql
  40. // [6]Путь для выходных файлов: tmp\\xxx
  41. System.out.println("v 2018-10-06 1");
  42. System.out.println("Start: " + LocalDateTime.now());
  43. String jdbcClassName = args.length > 0 ? args[0] : "com.ibm.db2.jcc.DB2Driver";
  44. String jdbcUrl = args.length > 1 ? args[1] : "jdbc:db2://orochi.utair.dom:50000/tickproc";
  45. String userName = args.length > 2 ? args[2] : "";
  46. String password = args.length > 3 ? args[3] : "";
  47. String schema = args.length > 4 ? args[4] : "";
  48. String queryFileName = args.length > 5 ? args[5] : "res\\someQuery.sql";
  49. String targetFileName = args.length > 6 ? args[6] : "tmp\\result-";
  50.  
  51. System.setProperty("oracle.jdbc.v$session.program", "VVM CSV/XML exporter");
  52. Class.forName(jdbcClassName);
  53. try (Connection conn = DriverManager.getConnection(jdbcUrl, userName, password);
  54. BufferedReader br = new BufferedReader(new FileReader(queryFileName), 1024 * 1024)) {
  55. String someQuery = "";
  56.  
  57. String line;
  58. while ((line = br.readLine()) != null) someQuery += line + "\n";
  59.  
  60. System.out.println("Connected to database successfully");
  61. // Perform database activities here...
  62. conn.setAutoCommit(false);
  63. conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
  64.  
  65. Statement stmt = conn.createStatement();
  66. stmt.setFetchSize(1000);
  67.  
  68. try {
  69. System.out.println();
  70. System.out.println("Execute: " + LocalDateTime.now());
  71. ResultSet rs = stmt.executeQuery(someQuery);
  72. ResultSetMetaData rsmd = rs.getMetaData(); // Для заголовков колонок в CSV
  73. System.out.println("Fetch: " + LocalDateTime.now());
  74.  
  75. try (BufferedWriter csv_bw = new BufferedWriter(
  76. new OutputStreamWriter(new FileOutputStream(targetFileName + ".csv")/* , "UTF-8" */),
  77. 1024 * 1024))
  78. {
  79. int columnCount = rsmd.getColumnCount();
  80. System.out.println("Column Count:" + columnCount);
  81. for (int i = 1; i <= columnCount; i++) {
  82. System.out.println("" + i + ". " + rsmd.getColumnName(i) + ", "
  83. + rsmd.getColumnLabel(i) + ", " + rsmd.getColumnTypeName(i) + ", "
  84. + rsmd.getColumnClassName(i));
  85. csv_bw.write(rsmd.getColumnLabel(i));
  86. csv_bw.write(";");
  87. }
  88. csv_bw.write("\n");
  89.  
  90. int rowCount = 0;
  91. while (rs.next()) {
  92. rowCount++;
  93. // Process the current row in rs here
  94. for (int i = 1; i <= columnCount; i++) {
  95. if (rsmd.getColumnTypeName(i).equals("XML")
  96. || rsmd.getColumnTypeName(i).equals("SYS.XMLTYPE")) // Чтобы работало и в DB2, и в Oracle
  97. {
  98. /*
  99. * Для XML-я возможно: ResultSet.getAsciiStream InputStream
  100. * ResultSet.getBinaryStream InputStream ResultSet.getBytes byte[]
  101. * ResultSet.getCharacterStream Reader ResultSet.getObject Object
  102. * ResultSet.getSQLXML SQLXML ResultSet.getString String
  103. */
  104. // SQLXML x = rs.getSQLXML(i);
  105. String x = rs.getString(i);
  106. if (x != null) {
  107. String fn = targetFileName + rowCount + ".xml";
  108. csv_bw.write(fn);
  109. try (BufferedWriter bw = new BufferedWriter(
  110. new OutputStreamWriter(new FileOutputStream(fn), "UTF-8"), 1024 * 1024))
  111. {
  112. bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
  113. bw.write(x);
  114. }
  115. }
  116. } else {
  117. Object o = rs.getObject(i);
  118. if (o != null) csv_bw.write(o.toString());
  119.  
  120. }
  121. csv_bw.write(";");
  122. }
  123. csv_bw.write("\n");
  124. }
  125. rs.close();
  126. System.out.println("End: " + LocalDateTime.now());
  127. System.out.println("Done with:" + rowCount + " rows");
  128. }
  129. } catch (SQLException e) {
  130. e.printStackTrace();
  131. conn.rollback();
  132. }
  133.  
  134. conn.commit();
  135. } catch (SQLException e) {
  136. e.printStackTrace();
  137. }
  138. }
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement