Java печатает записи базы данных на отдельных строках - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть программа JDBC, которая берет записи из базы данных MySQL и распечатывает результаты. Пользователь может выбрать, какие результаты он хочет из базы данных, установив различные флажки, чтобы отображать только определенные результаты.

Вот метод, который получает записи и распечатывает их:

private void execute() throws SQLException {
    String query = "SELECT * FROM customers";
    ResultSet rs = stmt.executeQuery(query);
    String result = "";
    while (rs.next()) {
        if (cb1.isSelected()) {
            int custid = rs.getInt("custid");
            result += custid + " ";
        }
        if (cb2.isSelected()) {
            String name = rs.getString("name");
            result += name + " ";
        }
        if (cb3.isSelected()) {
            String address = rs.getString("address");
            result += address + " ";
        }
        if (cb4.isSelected()) {
            String city = rs.getString("city");
            result += city + " ";
        }
        if (cb5.isSelected()) {
            String state = rs.getString("state");
            result += state + " ";
        }
        if (cb6.isSelected()) {
            int zip = rs.getInt("zip");
            result += zip + " ";
        }
        // print the results
    }
    System.out.println(result);
    results.setText(result);

    stmt.close();
}

В настоящее время, если я выберу, скажем, первые три флажка, я получу вывод:

1 Smith, Tim 12 Elm St 2 Jones, Tom 435 Oak Dr 3 Avery, Bill 623 Ash Ave 4 Kerr, Debra 1573 Yew Crt 

Однако вывод, который я получаю после:

1, Smith, Tim, 12 Elm St
2, Jones, Tom, 435 Oak Dr
3, Avery, Bill, 623 Ash Ave
4, Kerr, Debra, 1573 Yew Crt

Можно ли как-нибудь добавить новую строку после каждой записи в базе данных, а также, возможно, запятые между элементами в каждой записи? Я новичок в подключении JDBC и MySQL, поэтому любая помощь или советы приветствуются.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Во-первых, я бы использовал StringJoiner для сбора элементов. Затем я бы исключил множество локальных временных переменных. Наконец, я бы использовал println в цикле и еще один StringJoiner для финального result. Как,

private void execute() throws SQLException {
    String query = "SELECT * FROM customers";
    ResultSet rs = stmt.executeQuery(query);
    StringJoiner result = new StringJoiner(System.lineSeparator());
    while (rs.next()) {
        StringJoiner lineJoiner = new StringJoiner(", ");
        if (cb1.isSelected()) {
            lineJoiner.add(String.valueOf(rs.getInt("custid")));
        }
        if (cb2.isSelected()) {
            lineJoiner.add(rs.getString("name"));
        }
        if (cb3.isSelected()) {
            lineJoiner.add(rs.getString("address"));
        }
        if (cb4.isSelected()) {
            lineJoiner.add(rs.getString("city"));
        }
        if (cb5.isSelected()) {
            lineJoiner.add(rs.getString("state"));
        }
        if (cb6.isSelected()) {
            lineJoiner.add(String.valueOf(rs.getInt("zip")));
        }
        System.out.println(lineJoiner);
        result.add(lineJoiner.toString());
    }
    results.setText(result.toString());
    stmt.close();
}

Вы также можете сделать то же самое с Collection (s), как,

String query = "SELECT * FROM customers";
ResultSet rs = stmt.executeQuery(query);
List<String> msg = new ArrayList<>();
while (rs.next()) {
    List<String> al = new ArrayList<>();
    if (cb1.isSelected()) {
        al.add(String.valueOf(rs.getInt("custid")));
    }
    if (cb2.isSelected()) {
        al.add(rs.getString("name"));
    }
    if (cb3.isSelected()) {
        al.add(rs.getString("address"));
    }
    if (cb4.isSelected()) {
        al.add(rs.getString("city"));
    }
    if (cb5.isSelected()) {
        al.add(rs.getString("state"));
    }
    if (cb6.isSelected()) {
        al.add(String.valueOf(rs.getInt("zip")));
    }
    String line = al.stream().collect(Collectors.joining(", "));
    System.out.println(line);
    msg.add(line);
}
results.setText(msg.stream().collect(Collectors.joining(System.lineSeparator())));
stmt.close();

Предпочитайте, какой из них вы найдете для чтения .

0 голосов
/ 29 апреля 2018

Вы можете напечатать каждый отдельный результат непосредственно перед концом цикла while, тогда он будет печатать каждую запись в новой строке.

private void execute() throws SQLException {
    String query = "SELECT * FROM customers";
    ResultSet rs = stmt.executeQuery(query);
    String result = "";
    String singleResult = "";
    while (rs.next()) {
        if (cb1.isSelected()) {
            int custid = rs.getInt("custid");
            singleResult += custid + " ";
        }
        if (cb2.isSelected()) {
            String name = rs.getString("name");
            singleResult += name + " ";
        }
        if (cb3.isSelected()) {
            String address = rs.getString("address");
            singleResult += address + " ";
        }
        if (cb4.isSelected()) {
            String city = rs.getString("city");
            singleResult += city + " ";
        }
        if (cb5.isSelected()) {
            String state = rs.getString("state");
            singleResult += state + " ";
        }
        if (cb6.isSelected()) {
            int zip = rs.getInt("zip");
            singleResult += zip + " ";
        }
        System.out.println(singleResult);
        result +=singleResult;
    }
    //System.out.println(result);
    results.setText(result);

    stmt.close();
}

Или вы можете добавить разделитель строк непосредственно перед закрытием цикла

System.out.println(singleResult);
result +=singleResult;
result +="\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...