Отложенная печать на Java - PullRequest
0 голосов
/ 31 марта 2012

У меня есть особая проблема с обычной консольной печатью, и мне было интересно, есть ли у кого-нибудь решение для этого. Я пытаюсь напечатать таблицу данных, которая будет выглядеть примерно так:

Table
----------------------
Name    |Surname     |
----------------------
Mike    |Mikhailowish|
Rafaello|Mirena      |

и так далее. Чтобы напечатать границу бара, мне нужно знать, какова максимальная длина каждого значения столбца. Я не хочу просматривать всю базу данных, чтобы это выяснить, а затем снова распечатать. Я бы предпочел сделать что-то вроде:

System.out.printLater(s); //herejust leave a pointer to a StringBuilder you will build
...
s.append("--------");
...
System.out.printAllDeferred();

Я понимаю, что вышеизложенное, вероятно, в 99,99999% вероятности невозможно, но, возможно, у вас, ребята, есть умный способ достижения вышеизложенного?

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Вы можете обернуть PrintStream вокруг ByteArrayOutputStream и затем использовать этот PrintStream вместо System.out (или использовать System.setOut) для печати на нем.Позже вы можете вместо этого напечатать весь байтовый массив.

Но это на самом деле не поможет, так как вам придется настроить все столбцы;лучше собрать все ячейки из db в массив и вычислить максимальную длину, а затем распечатать массив.

1 голос
/ 31 марта 2012

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

for (String name : columnNames) {

    select max(LEN(columnName)) as maxchar from YourTable

}

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

Но это действительно зависит от области вашей проблемы, какой подход лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...