com.ibm.commons.util.print.ResultSetPrinter Maven / Gradle / Ivy
The newest version!
/*
* © Copyright IBM Corp. 2012-2013
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.ibm.commons.util.print;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Iterator;
/**
* @ibm-not-published
*/
public class ResultSetPrinter extends TablePrinter {
private class ViewTable implements ITable {
ResultSet rs;
ResultSetMetaData meta;
ViewTable(ResultSet rs) {
this.rs = rs;
try {
this.meta = rs.getMetaData();
} catch(SQLException ex) {ex.printStackTrace();}
}
public int getColumnCount() throws Exception {
return meta!=null ? meta.getColumnCount() : 0;
}
public String getColumnTitle(int col) throws Exception {
return meta.getColumnLabel(col+1);
}
public int getColumnSize(int col) throws Exception {
int sz = meta.getColumnDisplaySize(col+1);
int type = meta.getColumnType(col+1);
switch( type ) {
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR: {
sz = Math.min( Math.max( sz, 20 ), 64 );
} break;
case Types.OTHER: {
sz = 32;
}
}
if(sz<=10) {
sz = 10;
}
return sz;
}
public Iterator getRows(int start, int count) throws Exception {
if(start>0) {
rs.relative(start);
}
return new ViewRowIterator(rs);
}
}
private class ViewRowIterator implements Iterator {
ResultSet rs;
Boolean next;
ViewRowIterator(ResultSet rs) {
this.rs = rs;
}
public boolean hasNext() {
if(next==null) {
try {
next = Boolean.valueOf(rs.next());
} catch(SQLException ex) {
ex.printStackTrace();
next = Boolean.FALSE;
}
}
return next.booleanValue();
}
public Object next() {
if(next!=null && next.booleanValue()) {
next = null;
return new ViewRow(rs);
}
return null;
}
public void remove() {
}
}
private class ViewRow implements IRow {
ResultSet rs;
public ViewRow(ResultSet rs) {
this.rs = rs;
}
public String getRowValue(int col) {
try {
return rs.getString(col+1);
} catch(SQLException ex) {
ex.printStackTrace();
return "???>";
}
}
}
public ResultSetPrinter(ResultSet rs) {
setTable(new ViewTable(rs));
}
}