com.vividsolutions.jts.io.oracle.OraUtil Maven / Gradle / Ivy
The newest version!
package com.vividsolutions.jts.io.oracle;
import java.sql.SQLException;
import oracle.jdbc.OracleConnection;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import oracle.sql.Datum;
import oracle.sql.NUMBER;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
/**
* Utility methods for working with Oracle structures.
*
* @author Martin Davis
*
*/
public class OraUtil
{
/**
* Converts an Oracle Datum
into an int
value,
* with a default value used if the datum is NULL.
*
* @param datum the Oracle Datum
* @param defaultValue the value to use for NULLs
* @return an integer value
* @throws SQLException if an error occurs
*/
public static int toInteger(Datum datum, final int defaultValue)
throws SQLException
{
if (datum == null)
return defaultValue;
return ((NUMBER) datum).intValue();
}
/**
* Converts an Oracle ARRAY
into a int
array,
* with a default value used to represent NULL values.
*
* @param array an Oracle ARRAY of integer values
* @param defaultValue the value to use for NULL values
* @return an array of ints
* @throws SQLException if an error was encountered
*/
public static int[] toIntArray(ARRAY array, int defaultValue) throws SQLException
{
if (array == null)
return null;
if (defaultValue == 0)
return array.getIntArray();
return toIntArray(array.getOracleArray(), defaultValue);
}
/** Presents Datum[] as a int[] */
public static int[] toIntArray(Datum data[], final int defaultValue)
throws SQLException
{
if (data == null)
return null;
int array[] = new int[data.length];
for (int i = 0; i < data.length; i++) {
array[i] = toInteger(data[i], defaultValue);
}
return array;
}
/** Presents Datum[] as a double[] */
public static double[] toDoubleArray(Datum[] data, final double defaultValue)
{
if (data == null)
return null;
double array[] = new double[data.length];
for (int i = 0; i < data.length; i++) {
array[i] = toDouble(data[i], defaultValue);
}
return array;
}
/** Presents array as a double[] */
public static double[] toDoubleArray(ARRAY array, final double defaultValue)
throws SQLException
{
if (array == null)
return null;
if (defaultValue == 0)
return array.getDoubleArray();
return toDoubleArray(array.getOracleArray(), defaultValue);
}
/** Presents struct as a double[] */
public static double[] toDoubleArray(STRUCT struct, final double defaultValue)
throws SQLException
{
if (struct == null)
return null;
return toDoubleArray(struct.getOracleAttributes(), defaultValue);
}
/** Presents datum as a double */
public static double toDouble(Datum datum, final double defaultValue)
{
if (datum == null)
return defaultValue;
return ((NUMBER) datum).doubleValue();
}
/**
* Convenience method for NUMBER construction.
*
* Double.NaN is represented as NULL
to agree with JTS use.
*
*/
public static NUMBER toNUMBER(double number) throws SQLException
{
if (Double.isNaN(number)) {
return null;
}
return new NUMBER(number);
}
/**
* Convience method for ARRAY construction.
*
*/
public static ARRAY toARRAY(double[] doubles, String dataType,
OracleConnection connection) throws SQLException
{
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(dataType,
connection);
return new ARRAY(descriptor, connection, doubles);
}
/**
* Convience method for ARRAY construction.
*/
public static ARRAY toARRAY(int[] ints, String dataType,
OracleConnection connection) throws SQLException
{
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(dataType,
connection);
return new ARRAY(descriptor, connection, ints);
}
/** Convenience method for STRUCT construction. */
public static STRUCT toSTRUCT(Datum[] attributes, String dataType,
OracleConnection connection) throws SQLException
{
//TODO: fix this to be more generic
if (dataType.startsWith("*.")) {
dataType = "DRA." + dataType.substring(2);
}
StructDescriptor descriptor = StructDescriptor.createDescriptor(dataType,
connection);
return new STRUCT(descriptor, connection, attributes);
}
}