자바.java.javaClassCastException: oracle.sql입니다.타임스탬프를 java.sql에 캐스트할 수 없습니다.타임스탬프
네트워크를 통해 ResultSet을 스트리밍하는 응용 프로그램을 작업하고 있습니다.캐시된 RowSetImppl 클래스를 사용하게 되었습니다.그러나 Oracle DB에 연결하면 다음과 같은 오류가 발생합니다.
자바.java.javaClassCastException: oracle.sql입니다.타임스탬프를 java.sql에 캐스트할 수 없습니다.타임스탬프
제발 도와주세요.
소스 코드는 다음과 같습니다.
ResultSet res = response.getResultSet(); //resultset from the server
while (res.next()) {
Agent agent = new Agent();
agent.setName(res.getString(2));
agent.setMobile(res.getString(1));
agent.setBalance(res.getLong(4));
agent.setLastUpdate(res.getDate(3)); //date from the result set
agent.setAccountNumber(res.getString(5));
}
오류...
자바.java.javaClassCastException: oracle.sql입니다.타임스탬프를 java.sql에 캐스트할 수 없습니다.타임스탬프 java.lang.ClassCastException: oracle.sql입니다.타임스탬프를 java.sql에 캐스트할 수 없습니다.com.sun.rowset의 타임스탬프입니다.CachedRowSetImppl.getDate(CachedRowSetImppl.java:2139)
ResultSet.getObject()에 대한 javadoc은 JDBC 유형을 JDBC 규격(TIMestamp -> java.sqlTimestmp)에 따라 Java 유형에 매핑해야 합니다.
이 메서드는 지정된 열의 값을 Java 개체로 반환합니다.Java 객체의 유형은 JDBC 사양에 지정된 기본 제공 형식에 대한 매핑을 따라 열의 SQL 유형에 해당하는 기본 Java 객체 유형이 됩니다.
아시다시피 Oracle 드라이버는 기본적으로 표준을 준수하지 않으며 다음을 사용합니다.oracle.sql.TIMESTAMP대신 (확장되지 않음)java.sql.Timestamp). 좋은 소식은 oracle.jdbc를 설정하여 JDBC 준수를 강제로 적용할 수 있다는 것입니다.J2EE13 준수 시스템 속성:trueVM 시작 중:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
또는 프로그래밍 방식으로
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
이렇게 하면 getResult()가 다음의 인스턴스를 반환합니다.java.sql.Timestamp역시
자세한 내용은 Oracle.jdbc를 설정하는 여러 가지 방법에 대해 설명하는 Oracle JDBC 드라이버 설명서의 관련 섹션을 참조하십시오.J2EE13 준수.
탈출구를 찾았어요
oracle.sql.TIMESTAMP ts = (oracle.sql.TIMESTAMP) res.getObject("last_update");
agent.setLastUpdate(new Date(ts.dateValue().getTime()));
이 줄을 JVM 설정에 추가합니다.그건 작동할 것이다.
-Doracle.jdbc.J2EE13Compliant=true
이는 에서 파생되지 않기 때문입니다.java.sql.TIMESTAMP:
java.lang.Object -> oracle.sql.Datum -> oracle.sql.TIMESTAMP
당신은 전자를 후자에 캐스팅할 수 없습니다.
대신 다음을 사용합니다.
public Timestamp timestampValue(Calendar cal) throws SQLException통화
toTimestamp내부 오라클을 변환합니다.Date및 일정관리를 Java로Timestamp.
이 문제는 oracle.sql에 있는 timestampValue() 함수를 사용하여 해결할 수 있습니다.TIMESTAMP 클래스입니다.이 메서드는 oracle.sql을 변환합니다.타임스탬프를 java.sql로 변환합니다.타임스탬프.
oracle.sql.TIMESTAMP ts = (timeout.sql).TIMESTAMP) res.getObject("last_update"); 에이전트.setLastUpdate(ts.timestampValue());
내 생각에 문제는 너의 것입니다.setLastUpdate는 의대을기있습니의 를 기대하고 있습니다.java.sql.Date활자를
이사용때할을 때.agent.setLastUpdate(res.getDate(3));
그res.getDate(3)당신의 방법이 기대하지 않는 물체를 반환하고 있을 것이므로 그곳에 있을 수도 있습니다.ClassCastException그것 때문에
이 코드를 사용하여 문제가 해결되는지 확인합니다.
agent.setLastUpdate(new java.util.Date(res.getDate(3).getTime()));
아마 당신이 사용했을 것입니다.getTIMESTAMP()에 getTimestamp()getTIMESTAMP())getDATE()Oracle 관련 유형을 반환하는 확장입니다.
이 "JDBC"이므로 드라이버를 . 왜냐하면 반환 유형이getDate()이라java.sql.Date그리고 의getTimestamp()이라java.sql.Timestamp질문하신 것처럼 완전히 다른 유형일 수는 없습니다.
언급URL : https://stackoverflow.com/questions/13269564/java-lang-classcastexception-oracle-sql-timestamp-cannot-be-cast-to-java-sql-ti
'programing' 카테고리의 다른 글
| 'false'를 0으로, 'true'를 1로 변환하는 방법은 무엇입니까? (0) | 2023.06.28 |
|---|---|
| 다양한 RAISERROR 심각도 수준은 무엇을 의미합니까? (0) | 2023.06.28 |
| 로그인에 대한 SQL 쿼리 (0) | 2023.06.28 |
| Meteor.js는 "example.com " 또는 "www.example.com "에 배포합니까? (0) | 2023.06.28 |
| 10진수에 대한 NLS_NUMERIC_CHARTS 설정 (0) | 2023.06.28 |