Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.99.6
-
None
-
oracle 11g
sqoop1.99.6
ojdbc6.jar
-
Important
-
2569
Description
When I use sqoop to extract the timestamp Oracle type data, I must add -Doracle.jdbc.J2EE13Compliant=true to the /sqoop/server/bin/catalina.sh script, sqoop can work properly.
If the -Doracle.jdbc.J2EE13Compliant=true is not set due to carelessness
This error will occur
By: java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.sql.Timestamp Caused
Org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extract at (GenericJdbcExtractor.java:79)
Org.apache.sqoop.connector.jdbc.GenericJdbcExtractor.extract at (GenericJdbcExtractor.java:38)
Org.apache.sqoop.job.mr.SqoopMapper.run at (SqoopMapper.java:95)
7 more
I think can use API resultSet.getTimestamp(i + 1) instead of (java.sql.Timestamp)resultSet.getObject(i + 1); to avoid
This type converts exception .
resultSet.getDate(i + 1), resultSet.getTime(i+1) alse can instead of (java.sql.Date)resultSet.getObject(i + 1), (java.sql.Time)resultSet.getObject(i + 1)
switch (schemaColumn.getType()) { case DATE: // convert the sql date to JODA time as prescribed the Sqoop IDF spec array[i] = LocalDate.fromDateFields((java.sql.Date)resultSet.getObject(i + 1)); break; case DATE_TIME: // convert the sql date time to JODA time as prescribed the Sqoop IDF spec array[i] = LocalDateTime.fromDateFields((java.sql.Timestamp)resultSet.getObject(i + 1)); break; case TIME: // convert the sql time to JODA time as prescribed the Sqoop IDF spec array[i] = LocalTime.fromDateFields((java.sql.Time)resultSet.getObject(i + 1)); break; default: //for anything else array[i] = resultSet.getObject(i + 1); }
reference:http://docs.oracle.com/cd/B28359_01/java.111/b31224/datacc.htm#i1024324
Attachments
Issue Links
- duplicates
-
SQOOP-2728 Sqoop2: Avoid casting after calling getObject on ResultSet
- Resolved