public static Serializable[] extractRowFromDataTable(DataTable dt, int rowId) { final Serializable[] row = new Serializable[dt.getDataSchema().size()]; for (int i = 0; i < dt.getDataSchema().size(); ++i) { if (dt.getDataSchema().getColumnType(i).isSingleValue()) { switch (dt.getDataSchema().getColumnType(i)) { case INT: row[i] = dt.getInt(rowId, i); break; case LONG: row[i] = dt.getLong(rowId, i); break; case DOUBLE: row[i] = dt.getDouble(rowId, i); break; case FLOAT: row[i] = dt.getFloat(rowId, i); break; case STRING: row[i] = dt.getString(rowId, i); break; case SHORT: row[i] = dt.getShort(rowId, i); break; case CHAR: row[i] = dt.getChar(rowId, i); break; case BYTE: row[i] = dt.getByte(rowId, i); break; default: row[i] = dt.getObject(rowId, i); break; } } else { switch (dt.getDataSchema().getColumnType(i)) { case INT_ARRAY: row[i] = dt.getIntArray(rowId, i); break; case LONG_ARRAY: row[i] = dt.getLongArray(rowId, i); break; case DOUBLE_ARRAY: row[i] = dt.getDoubleArray(rowId, i); break; case FLOAT_ARRAY: row[i] = dt.getFloatArray(rowId, i); break; case STRING_ARRAY: row[i] = dt.getStringArray(rowId, i); break; case CHAR_ARRAY: row[i] = dt.getCharArray(rowId, i); break; case BYTE_ARRAY: row[i] = dt.getByteArray(rowId, i); break; default: row[i] = dt.getObject(rowId, i); break; } } } return row; }