Revision 14053 branches/v10/extensions/extOracleSpatial/src/es/prodevelop/cit/gvsig/fmap/drivers/jdbc/oracle/OracleSpatialDriver.java

View differences:

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