mirror of
https://github.com/GTNewHorizons/waila.git
synced 2026-11-15 17:44:46 +00:00
184 lines
5.2 KiB
Java
184 lines
5.2 KiB
Java
package au.com.bytecode.opencsv;
|
|
/**
|
|
Copyright 2005 Bytecode Pty Ltd.
|
|
|
|
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.
|
|
*/
|
|
import java.io.IOException;
|
|
import java.io.Reader;
|
|
import java.math.BigDecimal;
|
|
import java.sql.*;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
*
|
|
*
|
|
* helper class for processing JDBC ResultSet objects
|
|
*
|
|
*
|
|
*/
|
|
public class ResultSetHelperService implements ResultSetHelper {
|
|
public static final int CLOBBUFFERSIZE = 2048;
|
|
|
|
// note: we want to maintain compatibility with Java 5 VM's
|
|
// These types don't exist in Java 5
|
|
private static final int NVARCHAR = -9;
|
|
private static final int NCHAR = -15;
|
|
private static final int LONGNVARCHAR = -16;
|
|
private static final int NCLOB = 2011;
|
|
|
|
public String[] getColumnNames(ResultSet rs) throws SQLException {
|
|
List<String> names = new ArrayList<String>();
|
|
ResultSetMetaData metadata = rs.getMetaData();
|
|
|
|
for (int i = 0; i < metadata.getColumnCount(); i++) {
|
|
names.add(metadata.getColumnName(i+1));
|
|
}
|
|
|
|
String[] nameArray = new String[names.size()];
|
|
return names.toArray(nameArray);
|
|
}
|
|
|
|
public String[] getColumnValues(ResultSet rs) throws SQLException, IOException {
|
|
|
|
List<String> values = new ArrayList<String>();
|
|
ResultSetMetaData metadata = rs.getMetaData();
|
|
|
|
for (int i = 0; i < metadata.getColumnCount(); i++) {
|
|
values.add(getColumnValue(rs, metadata.getColumnType(i + 1), i + 1));
|
|
}
|
|
|
|
String[] valueArray = new String[values.size()];
|
|
return values.toArray(valueArray);
|
|
}
|
|
|
|
private String handleObject(Object obj){
|
|
return obj == null ? "" : String.valueOf(obj);
|
|
}
|
|
|
|
private String handleBigDecimal(BigDecimal decimal) {
|
|
return decimal == null ? "" : decimal.toString();
|
|
}
|
|
|
|
private String handleLong(ResultSet rs, int columnIndex) throws SQLException {
|
|
long lv = rs.getLong(columnIndex);
|
|
return rs.wasNull() ? "" : Long.toString(lv);
|
|
}
|
|
|
|
private String handleInteger(ResultSet rs, int columnIndex) throws SQLException {
|
|
int i = rs.getInt(columnIndex);
|
|
return rs.wasNull() ? "" : Integer.toString(i);
|
|
}
|
|
|
|
private String handleDate(ResultSet rs, int columnIndex) throws SQLException {
|
|
java.sql.Date date = rs.getDate(columnIndex);
|
|
String value = null;
|
|
if (date != null) {
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
|
|
value = dateFormat.format(date);
|
|
}
|
|
return value;
|
|
}
|
|
|
|
private String handleTime(Time time) {
|
|
return time == null ? null : time.toString();
|
|
}
|
|
|
|
private String handleTimestamp(Timestamp timestamp) {
|
|
SimpleDateFormat timeFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
|
|
return timestamp == null ? null : timeFormat.format(timestamp);
|
|
}
|
|
|
|
private String getColumnValue(ResultSet rs, int colType, int colIndex)
|
|
throws SQLException, IOException {
|
|
|
|
String value = "";
|
|
|
|
switch (colType)
|
|
{
|
|
case Types.BIT:
|
|
case Types.JAVA_OBJECT:
|
|
value = handleObject(rs.getObject(colIndex));
|
|
break;
|
|
case Types.BOOLEAN:
|
|
boolean b = rs.getBoolean(colIndex);
|
|
value = Boolean.valueOf(b).toString();
|
|
break;
|
|
case NCLOB: // todo : use rs.getNClob
|
|
case Types.CLOB:
|
|
Clob c = rs.getClob(colIndex);
|
|
if (c != null) {
|
|
value = read(c);
|
|
}
|
|
break;
|
|
case Types.BIGINT:
|
|
value = handleLong(rs, colIndex);
|
|
break;
|
|
case Types.DECIMAL:
|
|
case Types.DOUBLE:
|
|
case Types.FLOAT:
|
|
case Types.REAL:
|
|
case Types.NUMERIC:
|
|
value = handleBigDecimal(rs.getBigDecimal(colIndex));
|
|
break;
|
|
case Types.INTEGER:
|
|
case Types.TINYINT:
|
|
case Types.SMALLINT:
|
|
value = handleInteger(rs, colIndex);
|
|
break;
|
|
case Types.DATE:
|
|
value = handleDate(rs, colIndex);
|
|
break;
|
|
case Types.TIME:
|
|
value = handleTime(rs.getTime(colIndex));
|
|
break;
|
|
case Types.TIMESTAMP:
|
|
value = handleTimestamp(rs.getTimestamp(colIndex));
|
|
break;
|
|
case NVARCHAR: // todo : use rs.getNString
|
|
case NCHAR: // todo : use rs.getNString
|
|
case LONGNVARCHAR: // todo : use rs.getNString
|
|
case Types.LONGVARCHAR:
|
|
case Types.VARCHAR:
|
|
case Types.CHAR:
|
|
value = rs.getString(colIndex);
|
|
break;
|
|
default:
|
|
value = "";
|
|
}
|
|
|
|
|
|
if (value == null)
|
|
{
|
|
value = "";
|
|
}
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
private static String read(Clob c) throws SQLException, IOException
|
|
{
|
|
StringBuilder sb = new StringBuilder( (int) c.length());
|
|
Reader r = c.getCharacterStream();
|
|
char[] cbuf = new char[CLOBBUFFERSIZE];
|
|
int n;
|
|
while ((n = r.read(cbuf, 0, cbuf.length)) != -1) {
|
|
sb.append(cbuf, 0, n);
|
|
}
|
|
return sb.toString();
|
|
}
|
|
}
|