Как избавиться от второго параметра? - PullRequest
0 голосов
/ 05 июля 2019

Я создал метод (getData()) для получения данных из базы данных, который, кажется, работает. Я хочу использовать только 1 параметр, поэтому метод должен запускаться с className.getData("SELECT * FROM myTable"). Как я могу это сделать?

public List<String> getData(String sql, Map column) {
    this.driver();
    try {
        Connection conn = DriverManager.getConnection(this.url);
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);

        List<String> result = new ArrayList<>();
        if (column.containsKey("string")) {
            for (Object i : column.values()) {
                while (rs.next()) {
                    result.add(rs.getString(String.valueOf(i)));
                }
            }
            return result;
        }

    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

private void driver() {
    // Ensure we have mariadb Driver in classpath
    try {
        Class.forName("org.mariadb.jdbc.Driver");
    }
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

Ответы [ 2 ]

5 голосов
/ 05 июля 2019

Конечно, вам не нужно передавать имя столбца в качестве параметра.JDBC позволяет получить имя столбца из метаданных.Как показано ниже

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
Integer colunNum = rsmd.getColumnCount();
for(int i =0; i < columnNum; i ++){
    String colmnName = rsmd.getColumnName(i);
    ....
}

кредит для: Получить имена столбцов из java.sql.ResultSet

0 голосов
/ 05 июля 2019

Вызовите метод драйвера в экземпляре класса.

static {
    // Ensure we have mariadb Driver in classpath
    try {
        Class.forName("org.mariadb.jdbc.Driver");
    }
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

Также вы должны закрывать свои ресурсы. Вы можете сделать это с помощью try-with-resources .

public List<String> getData(String sql, Map column) {
    try (
        Connection conn = DriverManager.getConnection(this.url);
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
     ){
        List<String> result = new ArrayList<>();
        if (column.containsKey("string")) {
            for (Object i : column.values()) {
                while (rs.next()) {
                    result.add(rs.getString(String.valueOf(i)));
                }
            }
            return result;
        }

    }
    catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...