Revision 14053 branches/v10/extensions/extOracleSpatial/src/es/prodevelop/cit/gvsig/fmap/drivers/jdbc/oracle/OracleSpatialDriver.java
OracleSpatialDriver.java | ||
---|---|---|
109 | 109 |
// import oracle.spatial.geometry.JGeometry; |
110 | 110 |
|
111 | 111 |
import oracle.sql.ARRAY; |
112 |
import oracle.sql.DATE; |
|
112 | 113 |
import oracle.sql.Datum; |
113 | 114 |
import oracle.sql.NUMBER; |
114 | 115 |
import oracle.sql.ROWID; |
115 | 116 |
import oracle.sql.STRUCT; |
116 | 117 |
import oracle.sql.StructDescriptor; |
118 |
import oracle.sql.TIMESTAMP; |
|
117 | 119 |
|
118 | 120 |
import org.apache.log4j.Logger; |
119 | 121 |
import org.cresques.cts.ICoordTrans; |
... | ... | |
131 | 133 |
|
132 | 134 |
import java.sql.Connection; |
133 | 135 |
import java.sql.DatabaseMetaData; |
136 |
import java.sql.Date; |
|
134 | 137 |
import java.sql.Driver; |
135 | 138 |
import java.sql.DriverManager; |
136 | 139 |
import java.sql.PreparedStatement; |
... | ... | |
138 | 141 |
import java.sql.ResultSetMetaData; |
139 | 142 |
import java.sql.SQLException; |
140 | 143 |
import java.sql.Statement; |
144 |
import java.sql.Timestamp; |
|
141 | 145 |
import java.sql.Types; |
142 | 146 |
|
143 | 147 |
import java.text.ParseException; |
... | ... | |
923 | 927 |
Statement st = null; |
924 | 928 |
|
925 | 929 |
|
926 |
st = ((ConnectionJDBC)conn).getConnection().createStatement(ResultSet.TYPE_FORWARD_ONLY, |
|
927 |
ResultSet.CONCUR_READ_ONLY); |
|
930 |
st = ((ConnectionJDBC)conn).getConnection().createStatement( |
|
931 |
ResultSet.TYPE_FORWARD_ONLY, |
|
932 |
ResultSet.CONCUR_READ_ONLY); |
|
933 |
|
|
934 |
|
|
928 | 935 |
|
929 |
st.setFetchSize(FETCH_SIZE); |
|
930 |
logger.info("FETCH_SIZE = " + FETCH_SIZE); |
|
936 |
// st = ((ConnectionJDBC)conn).getConnection().createStatement(); |
|
931 | 937 |
|
938 |
st.setFetchSize(FETCH_SIZE); |
|
939 |
logger.info("FETCH_SIZE = " + FETCH_SIZE); |
|
940 |
|
|
932 | 941 |
ResultSet _r = null; |
933 | 942 |
_r = st.executeQuery(_sql); |
934 | 943 |
|
... | ... | |
1122 | 1131 |
|
1123 | 1132 |
public Value[] getAttributes(ResultSet rs) { |
1124 | 1133 |
Value[] res = null; |
1134 |
|
|
1135 |
int fcount = 0; |
|
1125 | 1136 |
|
1126 | 1137 |
try { |
1127 |
int fcount = rs.getMetaData().getColumnCount();
|
|
1138 |
fcount = rs.getMetaData().getColumnCount(); |
|
1128 | 1139 |
res = new Value[fcount]; |
1129 | 1140 |
|
1130 | 1141 |
for (int i = 0; i < fcount; i++) { |
1131 | 1142 |
Object obj = rs.getObject(i + 1); |
1132 | 1143 |
String objToString = null; |
1133 |
int _type = -1; |
|
1134 | 1144 |
|
1135 | 1145 |
if (obj instanceof String) { |
1136 | 1146 |
objToString = (String) obj; |
1137 |
_type = Types.VARCHAR; |
|
1138 |
} |
|
1139 |
else { |
|
1147 |
res[i] = ValueFactory.createValue(objToString); |
|
1148 |
} else { |
|
1140 | 1149 |
if (obj instanceof ROWID) { |
1141 | 1150 |
objToString = ((ROWID) obj).stringValue(); |
1142 |
_type = Types.VARCHAR; |
|
1143 |
} |
|
1144 |
else { |
|
1151 |
res[i] = ValueFactory.createValue(objToString); |
|
1152 |
} else { |
|
1145 | 1153 |
if (obj instanceof STRUCT) { |
1146 | 1154 |
objToString = "STRUCT"; |
1147 |
_type = Types.VARCHAR; |
|
1155 |
res[i] = ValueFactory.createValue(objToString); |
|
1156 |
} else { |
|
1157 |
if (obj instanceof TIMESTAMP) { |
|
1158 |
TIMESTAMP aux = (TIMESTAMP) obj; |
|
1159 |
objToString = aux.stringValue(); |
|
1160 |
Timestamp ts = flexibleTimeStamp(objToString); |
|
1161 |
res[i] = ValueFactory.createValue(ts); |
|
1162 |
|
|
1163 |
} else { |
|
1164 |
|
|
1165 |
objToString = obj.toString(); |
|
1166 |
int _type = getFieldType(i); |
|
1167 |
|
|
1168 |
if (obj instanceof DATE) { |
|
1169 |
objToString = objToString.replace('-', '/'); |
|
1170 |
} |
|
1171 |
res[i] = ValueFactory.createValueByType( |
|
1172 |
objToString, _type); |
|
1173 |
} |
|
1148 | 1174 |
} |
1149 |
else { |
|
1150 |
objToString = (obj == null) ? "NULL" : obj.toString(); |
|
1151 |
_type = getFieldType(i); |
|
1152 |
} |
|
1153 | 1175 |
} |
1154 | 1176 |
} |
1155 |
|
|
1156 |
// /* |
|
1157 |
if (_type == -1) { |
|
1158 |
obj = null; |
|
1159 |
} |
|
1160 |
|
|
1161 |
// */ |
|
1162 |
if (obj == null) { |
|
1163 |
res[i] = ValueFactory.createNullValue(); |
|
1164 |
} |
|
1165 |
else { |
|
1166 |
if (_type == Types.DATE) { |
|
1167 |
objToString = objToString.replace('-', '/'); |
|
1168 |
} |
|
1169 |
|
|
1170 |
res[i] = ValueFactory.createValueByType(objToString, _type); |
|
1171 |
} |
|
1172 | 1177 |
} |
1178 |
|
|
1179 |
} catch (Exception se) { |
|
1180 |
|
|
1181 |
logger.error("While getting resultset attribute values: " + se.getMessage()); |
|
1182 |
res = new Value[fcount]; |
|
1183 |
for (int i=0; i<fcount; i++) res[i] = ValueFactory.createNullValue(); |
|
1173 | 1184 |
} |
1174 |
catch (SQLException se) { |
|
1175 |
System.err.println("Error while getting attributes: " + |
|
1176 |
se.getMessage()); |
|
1177 |
|
|
1178 |
return null; |
|
1179 |
} |
|
1180 |
catch (com.hardcode.gdbms.engine.data.driver.DriverException e) { |
|
1181 |
System.err.println("Error while getting attributes: " + |
|
1182 |
e.getMessage()); |
|
1183 |
|
|
1184 |
return null; |
|
1185 |
} |
|
1186 |
catch (ParseException e) { |
|
1187 |
System.err.println("Error while getting attributes: " + |
|
1188 |
e.getMessage()); |
|
1189 |
|
|
1190 |
return null; |
|
1191 |
} |
|
1192 |
|
|
1185 |
|
|
1193 | 1186 |
return res; |
1194 | 1187 |
} |
1195 | 1188 |
|
... | ... | |
4583 | 4576 |
public String getTableName() { |
4584 | 4577 |
return fullTableName; |
4585 | 4578 |
} |
4579 |
|
|
4580 |
private Timestamp flexibleTimeStamp(String s) { |
|
4581 |
|
|
4582 |
String aux = s.replace('-', ' '); |
|
4583 |
aux = aux.replace(':', ' '); |
|
4584 |
aux = aux.replace('.', ' '); |
|
4585 |
// sample: 2007 12 31 23 59 59 9999 |
|
4586 |
String[] parts = aux.trim().split(" "); |
|
4587 |
|
|
4588 |
int year; |
|
4589 |
int month; |
|
4590 |
int day; |
|
4591 |
int hour; |
|
4592 |
int minute; |
|
4593 |
int second; |
|
4594 |
int a_nanos; |
|
4595 |
|
|
4596 |
if (parts.length == 7) { |
|
4597 |
|
|
4598 |
try { |
|
4599 |
|
|
4600 |
year = Integer.parseInt(parts[0]) - 1900; |
|
4601 |
month = Integer.parseInt(parts[1]) - 1; |
|
4602 |
day = Integer.parseInt(parts[2]); |
|
4603 |
hour = Integer.parseInt(parts[3]); |
|
4604 |
minute = Integer.parseInt(parts[4]); |
|
4605 |
second = Integer.parseInt(parts[5]); |
|
4606 |
a_nanos = Integer.parseInt(parts[6]); |
|
4607 |
|
|
4608 |
} catch (Exception ex) { |
|
4609 |
logger.debug("Bad time stamp: " + ex.getMessage()); |
|
4610 |
return new Timestamp(1970, 1, 1, 0, 0, 0, 0); |
|
4611 |
} |
|
4612 |
|
|
4613 |
} else { |
|
4614 |
|
|
4615 |
if (parts.length == 6) { |
|
4616 |
|
|
4617 |
try { |
|
4618 |
year = Integer.parseInt(parts[0]) - 1900; |
|
4619 |
month = Integer.parseInt(parts[1]) - 1; |
|
4620 |
day = Integer.parseInt(parts[2]); |
|
4621 |
hour = Integer.parseInt(parts[3]); |
|
4622 |
minute = Integer.parseInt(parts[4]); |
|
4623 |
second = Integer.parseInt(parts[5]); |
|
4624 |
a_nanos = 0; |
|
4625 |
|
|
4626 |
} catch (Exception ex) { |
|
4627 |
|
|
4628 |
logger.debug("Bad time stamp: " + ex.getMessage()); |
|
4629 |
return new Timestamp(1970, 1, 1, 0, 0, 0, 0); |
|
4630 |
} |
|
4631 |
|
|
4632 |
} else { |
|
4633 |
|
|
4634 |
logger.debug("Bad time stamp: " + s); |
|
4635 |
return new Timestamp(1970, 1, 1, 0, 0, 0, 0); |
|
4636 |
|
|
4637 |
} |
|
4638 |
} |
|
4639 |
|
|
4640 |
return new Timestamp(year, month, day, hour, minute, second, a_nanos); |
|
4641 |
} |
|
4586 | 4642 |
|
4587 | 4643 |
|
4588 | 4644 |
} |
Also available in: Unified diff