왜 java.lang이 뜨죠?DB에 BLOB를 로드하려고 할 때 AbstractMethodError가 발생합니까?
JDBC에 문제가 있어요
코드는 다음과 같습니다.
//blargeparam is a blob column.
PreparedStatement pst =connection.prepareStatement("update gcp_processparams_log set blargeparam= ? where idprocessparamslog=1");
pst.setBinaryStream(1,inputStream);
다음의 에러가 표시됩니다.
Exception in thread "main" java.lang.AbstractMethodError:
oracle.jdbc.driver.T2CPreparedStatement.setBinaryStream(ILjava/io/InputStream;)V
문자열은 " " " 입니다.jdbc:oracle:oci:@.....
Oracle 버전은 11g입니다.
에러 메시지로부터, 뭔가 부족한 것 같습니다만, 다음과 같습니다.
- 같은 BLOB 컬럼을 읽을 때(BLOB 포함)getBytes)는 모두 동작합니다.
- 인스턴트 클라이언트의 DLL이 라이브러리 경로에 (올바르게) 있습니다.
다음은 클래스 경로에 있는 Oracle JDBC JAR의 매니페스트입니다.
Manifest-Version: 1.0 Specification-Title: Oracle JDBC driver classes for use with JDK14 Sealed: true Created-By: 1.4.2_14 (Sun Microsystems Inc.) Implementation-Title: ojdbc14.jar Specification-Vendor: Oracle Corporation Specification-Version: Oracle JDBC Driver version - "10.2.0.4.0" Implementation-Version: Oracle JDBC Driver version - "10.2.0.4.0" Implementation-Vendor: Oracle Corporation Implementation-Time: Sat Feb 2 11:40:29 2008
JDBC에서는 보통 JDBC 드라이버가 JRE에 포함된 것보다 오래된 버전의 JDBC API를 구현하기 때문에 이 오류가 발생합니다.새로운 API에 나타난 메서드를 사용하지 않는 한 오래된 버전도 괜찮습니다.
JDBC의 어떤 잘 .setBinaryStream꽤 오래 된 것 같아요
다만, 사용의 JDBC 드라이버 버전(10.2.0.4.0)은 꽤 오래되었으므로, 11g(여기에서 다운로드)에서 릴리스된 버전으로 업그레이드한 후 다시 시도해 보는 것을 추천합니다.
드라이버 10.2 가 JDBC3 와 호환성이 있는 경우에서도, JRE6 에서는 동작하지 않는 경우가 있습니다.
http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.html#02_03
어떤 JDBC 드라이버가 어떤 버전의 Javasoft JDK를 지원합니까?
- 1.01.1.x8i ™ OCI ™ Thin ™ - JDK 1.0.x ® JDK 1.1.x
및 드라이버 - 1. 및 .1.1.5 OCI © Thin © JDK 1.0.x © JDK 1.1.x
- 1.1 및 1.2 () 8.1.6SDK Thin © JDK 1.1.x (Java2)
OCI -1.1.1.SDK OCI - JDK 1.1.x
및- 1.1 및 .x8.1.6 OCI 8 Thin j j j j j j j j - JDK 1.1.x 및 JDK 1.2.x
및 드라이버 -1. 및 .2.1.7 OCI © Thin © JDK 1.1.x 、 JDK 1.2.x
및 드라이버 - .1.2및1..0.1 OCI © Thin © © JDK 1.1.x, JDK 1.2x © JDK 1 . 3x 。
및 - 1.1 1.2 1..2.0 OCI thinxx - JDK 1.1x, JDK 1.2.x.
0및 드라이버 - 1..3 및 .4.x10.1.0 OCI © Thin © © JDK 1.2.x, JDK 1.3x © JDK 1.4x 。
및- 1.2 1.4 및 5.0.x10.2.0 OCI thinxx - JDK 1.2x, JDK 1.3x 。
0 및 드라이버 -1. 및 .6 11.1.0 OCI © Thin © JDK 1.5.x © JDK 1.6.x
Oracle 10.2.0은 다음을 지원합니다.
JDBC 3.0
데이터베이스 내에서의 다음 지원에는 실질적인 변경은 없습니다.변경된 것은 이전에 SQLException을 던졌던 일부 메서드가 대신 보다 합리적인 작업을 수행하게 되었다는 것입니다.
결과 세트 보유성
여러 결과 집합을 반환합니다.
JDK API는 Abstract Method Error에 대해 다음과 같이 설명합니다.
응용 프로그램이 추상 메서드를 호출하려고 할 때 느려집니다.일반적으로 이 오류는 컴파일러에 의해 검출됩니다.이 오류는 실행 시 현재 실행 중인 메서드가 마지막으로 컴파일된 이후 일부 클래스의 정의가 호환되지 않는 경우에만 발생합니다.
오라클 드라이버에 버그가 있나?
그냥 넣어주세요ojdbc6.jar수업의 진로에 있는 모든 것을 고칠 수 있도록CallbaleStatement예외:
oracle.jdbc.driver.T4CPreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V)
Oracle에서.
의 API에서 설명한 바와 같이java.sql.PreparedStatement.setBinaryStream()1.6부터 이용할 수 있기 때문에 JDBC 4.0 API입니다!JDBC 3 드라이버를 사용하고 있기 때문에, 이 방법을 사용할 수 없습니다.
ojdb6.jar를 사용하면 이러한 모든 문제를 해결할 수 있습니다.
메이븐 기반 응용 프로그램의 경우:
ojdbc6.jar를 다운로드하여 로컬 머신의 디렉토리에 복사합니다.
jar를 복사한 위치에서 로컬에 ojdbc6.jar를 설치합니다.다음 명령어 C:\SRK\Softwares\Libraries>mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -Dfile=jdfile=jdbc6DompGenerateBc.
프로젝트 pom.xml에 ojdbc6.jar 의존관계로 다음 항목을 추가합니다.
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> </dependency>
PS: 이 문제는 JPA에서 @Lob 주석을 사용하여 특히 Oracle DB 열에 큰 개체를 저장하기 때문일 수 있습니다.11.2.0.3(ojdbc6.jar)으로 업그레이드하면 문제를 해결할 수 있습니다.
내 경우에는 이것이 오류였다.
스레드 "main" java.lang에 예외가 있습니다.Abstract Method Error: oracle.jdbc.driver.T4CConnection.isValid(I)Z는 org.apache.tomcat.dbcp.dbcp2에 있습니다.org.apache.tomcat.dbcp.dbcp2에서 DelegatingConnection.isValid(DelegatingConnection.java:917).org.apache.tomcat.dbcp.dbcp2에서 PoolableConnection.validate(PoolableConnection.java:282)를 실행합니다.org.apache.tomcat.dbcp.dbcp2의 PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:356)입니다.org.apache.tomcat.dbcp.dbcp2에 있는 BasicDataSource.validateConnectionFactory(BasicDataSource.java:2306)입니다.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2289) at org.apache.tomcat.dbcp.dbcp2.org.apache.tomcat.dbcp.dbcp2에 있는 BasicDataSource.CreateDataSource(BasicDataSource.java:2038).BasicDataSource.getConnection(BasicDataSource.java:1532)을 입력합니다.Test.main(Test.java:24)
솔루션:난 그냥 변했어ojdbc14.jar로로 합니다.ojdbc6.jar
당신의 수업 경로를 매우 주의 깊게 조사할 것을 제안합니다.jar 파일의 두 가지 버전이 있을 수 있으며, 하나는 다른 하나의 메서드를 호출하고 다른 하나는 추상적인 메서드를 호출합니다.
제 경우 프로젝트의 context.xml 파일에 문제가 있었습니다.
context.xml로부터의 다음 명령어가 java.lang의 원인이 됩니다.Abstract Method Error, 데이터 소스 팩토리를 표시하지 않았기 때문입니다.
<Resource name="jdbc/myoracle"
auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@(DESCRIPTION = ... "
username="****" password="****" maxActive="10" maxIdle="1"
maxWait="-1" removeAbandoned="true"/>
Simpy adding factory ="factory.bc.jdbc.pool"을 추가합니다.Data Source Factory"는 다음과 같은 문제를 해결했습니다.
<Resource name="jdbc/myoracle"
auth="Container"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@(DESCRIPTION = ... "
username="****" password="****" maxActive="10" maxIdle="1"
maxWait="-1" removeAbandoned="true"/>
확실히 하기 위해서, factory="factory.debc.pool"을 삭제하고, 몇번이나 문제를 재현했습니다.리소스로부터의 Data Source Factory"
나는 이 문제에 직면한다.ojdbc14.jar 및 jdk 1.6 사용
InputStream in = new FileInputStream(file);
cstmt.setBinaryStream(1, in,file.length()); // got AbstractMethodError
InputStream in = new FileInputStream(file);
cstmt.setBinaryStream(1, in,(int)file.length()); // no problem.
InputStream in = new FileInputStream(file);
cstmt.setBinaryStream(1, in,file.length());
이것 대신에 당신은 사용할 필요가 있다.
InputStream in = new FileInputStream(file);
cstmt.setBinaryStream(1, in,(int)file.length());
이 문제는 이전 버전의 ojdbc - ojdbc14가 원인입니다.
현재 ojdbc jar 파일의 최신 버전을 응용 프로그램 또는 공유 라이브러리에 저장합니다. (한 가지 버전만 있고 최신 버전이어야 합니다.) - ojdbc6.jar
서버상의 애플리케이션 라이브러리와 공유 라이브러리를 확인합니다.
JDBC 드라이버에서 오류가 발생한 이유는 Oracle DB에 적합한 JDBC 드라이버를 입수해야 한다고 생각합니다.에서 구할 수 있습니다.
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html
나는 같은 문제를 받아서 해결했다.
이 문제를 해결하려면 commons-dbcp 라이브러리를 최신 버전(1.4)으로 업그레이드해야 합니다.최신 JDBC 드라이버로 동작합니다.
언급URL : https://stackoverflow.com/questions/1194990/why-do-i-get-java-lang-abstractmethoderror-when-trying-to-load-a-blob-in-the-db
'programing' 카테고리의 다른 글
| wp-admin은 공백 페이지를 표시하는데, 어떻게 수정해야 합니까? (0) | 2023.03.10 |
|---|---|
| 그라들 - 주 클래스를 찾거나 로드할 수 없습니다. (0) | 2023.03.10 |
| python 요청 패키지의 데이터와 json 매개 변수의 차이 (0) | 2023.03.10 |
| 콘솔에서 종료되지 않은 JSX 콘텐츠 오류를 발생시킵니다. (0) | 2023.03.10 |
| 스프링 부트로 CSS가 로드되지 않음 (0) | 2023.03.10 |