Advertisement
Guest User

Untitled

a guest
Mar 15th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.17 KB | None | 0 0
  1. Задача 1.
  2. Подключиться к потенциальной бд, указав driver jdbc и URL-адрес ```"jdbc:mysql://localhost/EMP"```.
  3. Проект создавать как maven, зависимости для jdbc прописывать в xml-файле. Создать класс, который бы выполнял обычный   select-запрос
  4. и возвращал бы структуру Map<Integer, List<String>>, где ключ - номер строки, значение - лист из значений столбцов этой строки.
  5. Например, если бы таблица была бы представлена в следующем виде:
  6.  
  7. ----------------------------------
  8. id | age | first | last |
  9. 5 | 27 | 1 | 99 |
  10. ----------------------------------
  11.  
  12. То результат был бы представлен в виде мапы с одним ключом (0) и значением в виде листа из 4 элементов {5, 27, 1, 99}.
  13.  
  14. В целях чистоты кода рекомендуется сделать приватный класс, который преобразует стринговые аргументы в select-запрос.
  15.  
  16. private String createSelectStm(String ... args){
  17. }
  18.  
  19. Класс подключения создавать отдельно. В конструктор класса передавать параметры подключения: URL, username, password.
  20.  
  21.  
  22. Интерфейс класса:
  23.  
  24. public interface ConnectDB {
  25. /**
  26. * Создаётся подключение к бд с заданными url, username password. Параметры передаются в конструктор
  27. * класса. В случае разрыва связи и прочих непредвиденных ситуаций все исключения должны быть обработы,
  28. * а само подключение успешно закрыто.
  29. *
  30. * Все значения столбцов таблицы представлены в виде int.
  31. *
  32. * @param args Последний стринговый аргумент представляет из себя название таблицы. Все предшествующие
  33. * аргументы - это названия столбцов таблицы.
  34. *
  35. * @return мапа, у которой ключ - номер строки, значение - лист из элементов столбцов этой строки.
  36. */
  37. Map<Integer, List<String>> simpleQuery(String[] args);
  38. }
  39.  
  40. Как должна использоваться работающая версия программы (работающая условно, так как реального подключения пока нет):
  41. public class Main {
  42.  
  43. public static void main(String[] args) throws ClassNotFoundException {
  44. final String DB_URL = "jdbc:mysql://localhost/EMP";
  45.  
  46. // Database credentials
  47. final String USER = "username";
  48. final String PASS = "password";
  49. ConnectDBImpl connectDB = new ConnectDBImpl(DB_URL, USER, PASS);
  50.  
  51. connectDB.simpleQuery("id", "age", "salary", "Employees");
  52. }
  53. }
  54.  
  55.  
  56. P.S. Олег, тут написал как лдолжен выглядеть работающий код класса:
  57. package JDBC;
  58.  
  59. import java.sql.Connection;
  60. import java.sql.DriverManager;
  61. import java.sql.ResultSet;
  62. import java.sql.SQLException;
  63. import java.sql.Statement;
  64. import java.util.ArrayList;
  65. import java.util.HashMap;
  66. import java.util.List;
  67. import java.util.Map;
  68.  
  69. public class ConnectDBImpl implements ConnectDB {
  70. private final String URL;
  71. private final String USER_NAME;
  72. private final String PWD;
  73. private final String DRIVER = "com.mysql.jdbc.Driver";
  74. Connection conn = null;
  75. Statement stmt = null;
  76.  
  77. ConnectDBImpl(String url, String userName, String pwd) throws ClassNotFoundException {
  78. this.URL = url;
  79. this.USER_NAME = userName;
  80. this.PWD = pwd;
  81.  
  82. //register driver.
  83. Class.forName("com.mysql.jdbc.Driver");
  84. }
  85.  
  86. @Override public Map<Integer, List<String>> simpleQuery(String... args) {
  87. Map<Integer, List<String>> result = new HashMap<>();
  88. try {
  89. String sql = createSelectStm(args);
  90.  
  91. int cntr = 0;
  92. //Open a connection
  93. System.out.println("Connecting to database...");
  94. conn = DriverManager.getConnection(URL, USER_NAME, PWD);
  95.  
  96. //Execute a query
  97. System.out.println("Creating statement...");
  98. stmt = conn.createStatement();
  99. ResultSet rs = stmt.executeQuery(sql);
  100.  
  101. //STEP 5: Extract data from result set
  102. while (rs.next()) {
  103. List<String> rowrResult = new ArrayList<>();
  104.  
  105. //Retrieve by column name
  106. for(int i = 0; i < args.length - 1; i++)
  107. rowrResult.add(String.valueOf(rs.getInt(args[i])));
  108.  
  109. result.put(cntr, rowrResult);
  110.  
  111. cntr++;
  112. }
  113. //Clean-up environment
  114. rs.close();
  115. stmt.close();
  116. conn.close();
  117. }
  118. catch (SQLException se) {
  119. //Handle errors for JDBC
  120. se.printStackTrace();
  121. }
  122. finally {
  123. //finally block used to close resources
  124. try {
  125. if (stmt != null)
  126. stmt.close();
  127. }
  128. catch (SQLException se2) {
  129. }// nothing we can do
  130. try {
  131. if (conn != null)
  132. conn.close();
  133. }
  134. catch (SQLException se) {
  135. se.printStackTrace();
  136. }//end finally try
  137. }//end try
  138.  
  139. return result;
  140. }
  141.  
  142. private String createSelectStm(String ... args){
  143. StringBuffer sql = new StringBuffer("SELECT ");
  144.  
  145. for(int i = 0; i < args.length - 1; i++) {
  146. sql.append(args[i]);
  147.  
  148. sql.append(", ");
  149. }
  150.  
  151. sql.delete(sql.length() - 3, sql.length() - 1);
  152.  
  153. sql.append(" FROM ");
  154. sql.append(args[args.length - 1]);
  155.  
  156. return sql.toString();
  157. }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement