我有一般控制台打印的具体问题,我想知道是否有人有解决方案。我正在尝试打印一个看起来像这样的dataTable:
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%的可能性,但也许你们有一个聪明的方法来实现上述目标?
答案 0 :(得分:2)
您可以将PrintStream
打包在ByteArrayOutputStream
周围,然后使用该PrintStream而不是System.out
(或使用System.setOut
)打印到它。稍后您可以打印整个字节数组。
但这并没有真正帮助你,因为你必须调整所有列;更好地将db中的所有单元格收集到一个数组中并计算最大长度,然后打印该数组。
答案 1 :(得分:1)
如果有额外的查询不打扰你,也许你可以先找出每列的最大长度。
for (String name : columnNames) {
select max(LEN(columnName)) as maxchar from YourTable
}
否则,正如其他人所说,你可以先在内存中读取整个表,然后这样做计算特定列的最大长度,这取决于你的堆大小是否足够大并且在内存中有完整的表不是问题。
但这真的取决于你的问题领域最好的方法。