Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Задача 1.
- Подключиться к потенциальной бд, указав driver jdbc и URL-адрес ```"jdbc:mysql://localhost/EMP"```.
- Проект создавать как maven, зависимости для jdbc прописывать в xml-файле. Создать класс, который бы выполнял обычный select-запрос
- и возвращал бы структуру Map<Integer, List<String>>, где ключ - номер строки, значение - лист из значений столбцов этой строки.
- Например, если бы таблица была бы представлена в следующем виде:
- ----------------------------------
- id | age | first | last |
- 5 | 27 | 1 | 99 |
- ----------------------------------
- То результат был бы представлен в виде мапы с одним ключом (0) и значением в виде листа из 4 элементов {5, 27, 1, 99}.
- В целях чистоты кода рекомендуется сделать приватный класс, который преобразует стринговые аргументы в select-запрос.
- private String createSelectStm(String ... args){
- }
- Класс подключения создавать отдельно. В конструктор класса передавать параметры подключения: URL, username, password.
- Интерфейс класса:
- public interface ConnectDB {
- /**
- * Создаётся подключение к бд с заданными url, username password. Параметры передаются в конструктор
- * класса. В случае разрыва связи и прочих непредвиденных ситуаций все исключения должны быть обработы,
- * а само подключение успешно закрыто.
- *
- * Все значения столбцов таблицы представлены в виде int.
- *
- * @param args Последний стринговый аргумент представляет из себя название таблицы. Все предшествующие
- * аргументы - это названия столбцов таблицы.
- *
- * @return мапа, у которой ключ - номер строки, значение - лист из элементов столбцов этой строки.
- */
- Map<Integer, List<String>> simpleQuery(String[] args);
- }
- Как должна использоваться работающая версия программы (работающая условно, так как реального подключения пока нет):
- public class Main {
- public static void main(String[] args) throws ClassNotFoundException {
- final String DB_URL = "jdbc:mysql://localhost/EMP";
- // Database credentials
- final String USER = "username";
- final String PASS = "password";
- ConnectDBImpl connectDB = new ConnectDBImpl(DB_URL, USER, PASS);
- connectDB.simpleQuery("id", "age", "salary", "Employees");
- }
- }
- P.S. Олег, тут написал как лдолжен выглядеть работающий код класса:
- package JDBC;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- public class ConnectDBImpl implements ConnectDB {
- private final String URL;
- private final String USER_NAME;
- private final String PWD;
- private final String DRIVER = "com.mysql.jdbc.Driver";
- Connection conn = null;
- Statement stmt = null;
- ConnectDBImpl(String url, String userName, String pwd) throws ClassNotFoundException {
- this.URL = url;
- this.USER_NAME = userName;
- this.PWD = pwd;
- //register driver.
- Class.forName("com.mysql.jdbc.Driver");
- }
- @Override public Map<Integer, List<String>> simpleQuery(String... args) {
- Map<Integer, List<String>> result = new HashMap<>();
- try {
- String sql = createSelectStm(args);
- int cntr = 0;
- //Open a connection
- System.out.println("Connecting to database...");
- conn = DriverManager.getConnection(URL, USER_NAME, PWD);
- //Execute a query
- System.out.println("Creating statement...");
- stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(sql);
- //STEP 5: Extract data from result set
- while (rs.next()) {
- List<String> rowrResult = new ArrayList<>();
- //Retrieve by column name
- for(int i = 0; i < args.length - 1; i++)
- rowrResult.add(String.valueOf(rs.getInt(args[i])));
- result.put(cntr, rowrResult);
- cntr++;
- }
- //Clean-up environment
- rs.close();
- stmt.close();
- conn.close();
- }
- catch (SQLException se) {
- //Handle errors for JDBC
- se.printStackTrace();
- }
- finally {
- //finally block used to close resources
- try {
- if (stmt != null)
- stmt.close();
- }
- catch (SQLException se2) {
- }// nothing we can do
- try {
- if (conn != null)
- conn.close();
- }
- catch (SQLException se) {
- se.printStackTrace();
- }//end finally try
- }//end try
- return result;
- }
- private String createSelectStm(String ... args){
- StringBuffer sql = new StringBuffer("SELECT ");
- for(int i = 0; i < args.length - 1; i++) {
- sql.append(args[i]);
- sql.append(", ");
- }
- sql.delete(sql.length() - 3, sql.length() - 1);
- sql.append(" FROM ");
- sql.append(args[args.length - 1]);
- return sql.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement