jdbc 연결에서 드라이버 클래스 이름(드라이버 이름 아님)을 가져오는 방법
아래 형식의 context.xml 파일이 있습니다.
<Context shallowOutput="true" path="/">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
username="OMITTED"
password="OMITTED"
url="OMITTED"
maxActive="20"
maxIdle="10"
maxWait="-1"/>
이 contex.xml에서 드라이버 CLASS 이름을 가져와야 합니다.
좋아하려고 할 때마다
DataSource ds = (DataSource)context.lookup("java:/jdbc/myDataSource")
그리고 다음을 사용하여 연결에서 드라이버 클래스 이름을 가져오도록 노력합니다.
ds.getConnection().getMetatData().getDriverName()
클래스 이름 oracle.jdbc.driver 대신 Oracle JDBC Driver만 반환합니다.오라클 드라이버
어떻게 하면 문맥에서 학급 이름을 얻을 수 있을까요?
당신이 바랄 수 있는 최선은 다음과 같습니다.
DriverManager.getDriver(ds.getConnection().getMetaData().getURL()).getClass();
메타데이터는 이 연결에 대한 URL을 반환해야 하며 URL 접두사는 Driver Manager(드라이버 관리자)에 등록해야 합니다.
사용할 수 있는 모든 개체에 대해object.getClass().getName()
JDBC 연결의 경우 다음과 같습니다.
String db_class = DriverManager.getConnection(db_url, usr, passwd).getClass().getName();
나의 포스트그레를 위하여SQL 드라이버가 반환합니다.
org.postgresql.jdbc4.Jdbc4Connection
코드에서는 다음과 같이 작동해야 합니다.
ds.getConnection().getClass().getName()
그리고 연결의 클래스 이름을 보여주는 간단한 절차:
public static void show_connection_info(Connection conn)
{
System.out.println("Connection: " + conn);
System.out.println("Connection class: " + conn.getClass());
System.out.println("Connection class name: " + conn.getClass().getName());
}
테스트에서 사용한 Oracle 연결의 경우 다음을 확인할 수 있습니다.
Connection: oracle.jdbc.driver.T4CConnection@1e1c66a
Connection class: class oracle.jdbc.driver.T4CConnection
Connection class name: oracle.jdbc.driver.T4CConnection
저는 반성에 기반한 "시도" 알고리즘을 사용합니다.Oracle DataSource는 드라이버를 "driver" 속성에 포함하며, 동일한 작업을 수행하는 DataSource가 많을 수 있습니다.그래서 다음과 같습니다.
Field field = dataSource.getClass().getDeclaredField("driver");
field.setAccessible(true);
return field.get(dataSource).getClass().getName();
일을 보다
Tomcat(7)을 사용하면 다음을 수행할 수 있습니다.
if(source instanceof org.apache.tomcat.dbcp.dbcp.BasicDataSource){
logger.info("Driver className: "+((org.apache.tomcat.dbcp.dbcp.BasicDataSource)source).getDriverClassName());
}
빌드 시 dbcp 라이브러리도 포함해야 합니다.
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-dbcp -->
<dependency><!-- to check driver name effectively running -->
<scope>provided</scope>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>7.0.47</version>
</dependency>
언급URL : https://stackoverflow.com/questions/22317215/how-to-get-driver-class-name-not-driver-name-from-jdbc-connection
'codememo' 카테고리의 다른 글
| angular ui-router에서 브라우저 기록을 변경하지 않고 상태 변경 (0) | 2023.10.10 |
|---|---|
| 워드프레스, 깃 및 도커 (0) | 2023.10.10 |
| 스택 크기 추정 (0) | 2023.10.10 |
| 비트 시프트와 정수 프로모션? (0) | 2023.10.10 |
| 로컬 IIS 7.5에서 Windows 인증이 작동하지 않습니다. 오류 401.1 (0) | 2023.10.10 |