in blocks/cocoon-databases/cocoon-databases-impl/src/main/java/org/apache/cocoon/util/JDBCTypeConversions.java [242:546]
public static void setColumn(PreparedStatement statement, int position, Object value, Integer typeObject) throws Exception {
if (value instanceof String) {
value = ((String) value).trim();
}
if (typeObject == null) {
throw new SQLException("Can't set column because the type is unrecognized");
}
if (value == null) {
/** If the value is null, set the column value null and return **/
statement.setNull(position, typeObject.intValue());
return;
}
if ("".equals(value)) {
switch (typeObject.intValue()) {
case Types.CHAR:
case Types.CLOB:
case Types.VARCHAR:
/** If the value is an empty string and the column is
a string type, we can continue **/
break;
default:
/** If the value is an empty string and the column
is something else, we treat it as a null value **/
statement.setNull(position, typeObject.intValue());
return;
}
}
File file;
int length;
InputStream asciiStream;
//System.out.println("========================================================================");
//System.out.println("JDBCTypeConversions: setting type "+typeObject.intValue());
switch (typeObject.intValue()) {
case Types.CLOB:
//System.out.println("CLOB");
Clob clob;
if (value instanceof Clob) {
clob = (Clob) value;
} else if (value instanceof File) {
File asciiFile = (File) value;
asciiStream = new BufferedInputStream(new FileInputStream(asciiFile));
length = (int) asciiFile.length();
clob = new ClobHelper(asciiStream, length);
} else if (value instanceof Part) {
Part anyFile = (Part) value;
asciiStream = new BufferedInputStream(anyFile.getInputStream());
length = anyFile.getSize();
clob = new ClobHelper(asciiStream, length);
} else if (value instanceof JDBCxlobHelper) {
asciiStream = ((JDBCxlobHelper) value).inputStream;
length = ((JDBCxlobHelper) value).length;
clob = new ClobHelper(asciiStream, length);
} else if (value instanceof Source) {
asciiStream = ((Source) value).getInputStream();
length = (int)((Source) value).getContentLength();
clob = new ClobHelper(asciiStream, length);
} else {
String asciiText = value.toString();
asciiStream = new ByteArrayInputStream(asciiText.getBytes());
length = asciiText.length();
clob = new ClobHelper(asciiStream, length);
}
statement.setClob(position, clob);
break;
case Types.CHAR:
// simple large object, e.g. Informix's TEXT
//System.out.println("CHAR");
if (value instanceof File) {
File asciiFile = (File) value;
asciiStream = new BufferedInputStream(new FileInputStream(asciiFile));
length = (int) asciiFile.length();
} else if (value instanceof JDBCxlobHelper) {
asciiStream = ((JDBCxlobHelper) value).inputStream;
length = ((JDBCxlobHelper) value).length;
} else if (value instanceof Source) {
asciiStream = ((Source) value).getInputStream();
length = (int)((Source) value).getContentLength();
} else if (value instanceof Part) {
Part anyFile = (Part) value;
asciiStream = new BufferedInputStream(anyFile.getInputStream());
length = anyFile.getSize();
clob = new ClobHelper(asciiStream, length);
} else {
String asciiText = value.toString();
asciiStream = new BufferedInputStream(new ByteArrayInputStream(asciiText.getBytes()));
length = asciiText.length();
}
statement.setAsciiStream(position, asciiStream, length);
break;
case Types.BIGINT:
//System.out.println("BIGINT");
BigDecimal bd;
if (value instanceof BigDecimal) {
bd = (BigDecimal) value;
} else if (value instanceof Number) {
bd = BigDecimal.valueOf(((Number)value).longValue());
} else {
bd = new BigDecimal(value.toString());
}
statement.setBigDecimal(position, bd);
break;
case Types.TINYINT:
//System.out.println("TINYINT");
Byte b;
if (value instanceof Byte) {
b = (Byte) value;
} else if (value instanceof Number) {
b = new Byte(((Number) value).byteValue());
} else {
b = new Byte(value.toString());
}
statement.setByte(position, b.byteValue());
break;
case Types.DATE:
//System.out.println("DATE");
Date d;
if (value instanceof Date) {
d = (Date) value;
} else if (value instanceof java.util.Date) {
d = new Date(((java.util.Date) value).getTime());
} else if (value instanceof Calendar) {
d = new Date(((Calendar) value).getTime().getTime());
} else {
d = Date.valueOf(value.toString());
}
statement.setDate(position, d);
break;
case Types.DOUBLE:
//System.out.println("DOUBLE");
double db;
if (value instanceof Number) {
db = (((Number) value).doubleValue());
} else {
db = Double.parseDouble(value.toString());
}
statement.setDouble(position, db);
break;
case Types.FLOAT:
//System.out.println("FLOAT");
float f;
if (value instanceof Number) {
f = (((Number) value).floatValue());
} else {
f = Float.parseFloat(value.toString());
}
statement.setFloat(position, f);
break;
case Types.NUMERIC:
//System.out.println("NUMERIC");
long l;
if (value instanceof Number) {
l = (((Number) value).longValue());
} else {
l = Long.parseLong(value.toString());
}
statement.setLong(position, l);
break;
case Types.SMALLINT:
//System.out.println("SMALLINT");
Short s;
if (value instanceof Short) {
s = (Short) value;
} else if (value instanceof Number) {
s = new Short(((Number) value).shortValue());
} else {
s = new Short(value.toString());
}
statement.setShort(position, s.shortValue());
break;
case Types.TIME:
//System.out.println("TIME");
Time t;
if (value instanceof Time) {
t = (Time) value;
} else if (value instanceof java.util.Date){
t = new Time(((java.util.Date) value).getTime());
} else {
t = Time.valueOf(value.toString());
}
statement.setTime(position, t);
break;
case Types.TIMESTAMP:
//System.out.println("TIMESTAMP");
Timestamp ts;
if (value instanceof Time) {
ts = (Timestamp) value;
} else if (value instanceof java.util.Date) {
ts = new Timestamp(((java.util.Date) value).getTime());
} else {
ts = Timestamp.valueOf(value.toString());
}
statement.setTimestamp(position, ts);
break;
case Types.ARRAY:
//System.out.println("ARRAY");
statement.setArray(position, (Array) value); // no way to convert string to array
break;
case Types.STRUCT:
//System.out.println("STRUCT");
case Types.OTHER:
//System.out.println("OTHER");
statement.setObject(position, value);
break;
case Types.LONGVARBINARY:
//System.out.println("LONGVARBINARY");
statement.setTimestamp(position, new Timestamp((new java.util.Date()).getTime()));
break;
case Types.VARCHAR:
//System.out.println("VARCHAR");
statement.setString(position, value.toString());
break;
case Types.BLOB:
//System.out.println("BLOB");
if (value instanceof JDBCxlobHelper) {
statement.setBinaryStream(position, ((JDBCxlobHelper)value).inputStream, ((JDBCxlobHelper)value).length);
} else if (value instanceof Source){
statement.setBinaryStream(position, ((Source)value).getInputStream(), (int)((Source)value).getContentLength());
} else {
Blob blob;
if (value instanceof Blob) {
blob = (Blob) value;
} else if( value instanceof File) {
file = (File)value;
blob = new BlobHelper(new FileInputStream(file), (int) file.length());
} else if (value instanceof String) {
file = new File((String)value);
blob = new BlobHelper(new FileInputStream(file), (int) file.length());
} else if (value instanceof Part) {
Part anyFile = (Part) value;
blob = new BlobHelper(new BufferedInputStream(anyFile.getInputStream()), anyFile.getSize());
} else {
throw new SQLException("Invalid type for blob: "+value.getClass().getName());
}
//InputStream input = new BufferedInputStream(new FileInputStream(file));
statement.setBlob(position, blob);
}
break;
case Types.VARBINARY:
//System.out.println("VARBINARY");
if (value instanceof JDBCxlobHelper) {
statement.setBinaryStream(position, ((JDBCxlobHelper)value).inputStream, ((JDBCxlobHelper)value).length);
} else if (value instanceof Source){
statement.setBinaryStream(position, ((Source)value).getInputStream(), (int)((Source)value).getContentLength());
} else if (value instanceof Part) {
statement.setBinaryStream(position, ((Part)value).getInputStream(), ((Part)value).getSize());
} else {
if (value instanceof File) {
file = (File)value;
} else if (value instanceof String) {
file = new File((String)value);
} else {
throw new SQLException("Invalid type for blob: "+value.getClass().getName());
}
//InputStream input = new BufferedInputStream(new FileInputStream(file));
FileInputStream input = new FileInputStream(file);
statement.setBinaryStream(position, input, (int)file.length());
}
break;
case Types.INTEGER:
//System.out.println("INTEGER");
Integer i;
if (value instanceof Integer) {
i = (Integer) value;
} else if (value instanceof Number) {
i = new Integer(((Number) value).intValue());
} else {
i = new Integer(value.toString());
}
statement.setInt(position, i.intValue());
break;
case Types.BIT:
//System.out.println("BIT");
Boolean bo;
if (value instanceof Boolean) {
bo = (Boolean)value;
} else if (value instanceof Number) {
bo = BooleanUtils.toBooleanObject(((Number) value).intValue()==1);
} else {
bo = BooleanUtils.toBooleanObject(value.toString());
}
statement.setBoolean(position, bo.booleanValue());
break;
default:
//System.out.println("default");
throw new SQLException("Impossible exception - invalid type ");
}
//System.out.println("========================================================================");
}