Java는 Oracle 데이터베이스에 JDBC Thin Driver를 연결하는 세 가지 방법을 개발합니다.
1. JDBC OCI:oci는 oracle call interface의 줄임말로 이 드라이브는 전통적인 ODBC 드라이브와 유사하다.Oracle Call Interface and Net8이 필요하기 때문에 이 드라이브를 사용하는 JAVA 프로그램을 실행하는 기계에 클라이언트 소프트웨어를 설치해야 합니다. 사실은orcale 클라이언트에서 dll 방식으로 제공하는oci와 서버 설정에 사용됩니다.
2. JDBC Thin:thin은 for thin client라는 뜻으로 이런 드라이브는 일반적으로 WEB 브라우저에서 실행되는 JAVA 프로그램에 사용된다.OCI or Net8이 아니라 Java sockets를 통해 통신하는 순수한 자바로 이루어진 구동이기 때문에 JDBC Thin을 사용하는 클라이언트 기기에orcale 클라이언트 소프트웨어를 설치할 필요가 없기 때문에 이식성이 뛰어나 웹 개발에 사용된다.
3. JDBC KPRB: 이러한 드라이브는 데이터베이스에 직접 저장된 JAVA 프로그램에서 사용된다. 예를 들어 Java Stored Procedures, triggers, Database JSP's 등이다.서버 내부에서 사용하기 때문에 그는 기본 또는 현재 세션을 사용하여 방문 데이터베이스에 연결합니다. 사용자 이름 비밀번호 등이 필요하지 않고 데이터베이스 URL도 필요하지 않습니다.
하나.JDBC 연결 Oracle 설명
JDBC의 애플리케이션 연결 Oracle에 다음과 같은 오류가 발생했습니다.
ORA-12505,TNS:listener does not currently know of SID given in connect descriptor TheConnection descriptor used by the client was.
저는 DB 차원에서 정적 등록을 구성했고 GLOBAL_DBNAME 및 SID_NAME는 다르고 이전의 설정은 모두 같기 때문에 이 문제를 발견하지 못했다.
(SID_DESC =
(GLOBAL_DBNAME = dave)
(ORACLE_HOME =D:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = NEWCCS)
)
Oracle Listener 동적 등록 및 정적 등록https://www.jb51.net/article/75885.htm
인터넷에서 구글을 살펴보니 JDBC Thin Driver의 formats는 세 가지 형식이 있습니다.
형식 1: Oracle JDBC Thin using a ServiceName:
jdbc:oracle:thin:@//
Example: jdbc:oracle:thin:@//192.168.2.1:1521/XE
@ 뒤에//이 있는 형식은 SID 사용과 크게 다릅니다.
이 형식은 Oracle에서 권장하는 형식입니다. 클러스터의 경우 각 노드의 SID는 다르지만 SERVICE_NAME는 모든 노드를 포함할 수 있습니다.
형식 2: Oracle JDBC Thin using an SID:
jdbc:oracle:thin:@
Example: jdbc:oracle:thin:192.168.2.1:1521:X01A
Note: Support for SID is being phased out. Oracle recommends that users switch over to usingservice names.
형식 3: Oracle JDBC Thin using a TNSName:
jdbc:oracle:thin:@
Example: jdbc:oracle:thin:@GL
Note:
Support for TNSNames was added in the driver release 10.2.0.1
2.테스트
2.1 준비:
Oracle은 11gR2입니다.
Listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = dave)
(ORACLE_HOME =D:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = NEWCCS)
)
)
Tnsnames.ora
DVD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dave)
)
)
2.2 테스트 1, SID: newccs 사용
.imporjava.sql.*
.publiclasjdb
StrindbUr"jdbc:oracle:thin:@...::newccs"
StrintheUse"dave"
StrintheP"dave"
Connectionull
Statemenconn
ResultSernull
publijdbc(
tr
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance()
DriverManager.getConnection(dbUrltheUserthePw)
conc.createStatement()
catc(Exceptioe
e.printStackTrace()
publibooleaexecuteUpdate(Strinsql
tr
conn.executeUpdate(sql)
returtrue
catc(SQLExceptioe
e.printStackTrace()
returfalse
publiResultSeexecuteQuery(Strinsql
rnull
tr
rconn.executeQuery(sql)
catc(SQLExceptioe
e.printStackTrace()
returrs
publivoiclose(
tr
conn.close()
c.close()
catc(Exceptioe
e.printStackTrace()
publistativoimain(String[args
ResultSers
jdbconnejdbc()
rconn.executeQuery("selecfrodavwherrownum<")
tr
whil(rs.next()
System.out.println(rs.getString("username")+"--"+rs.getString("user_id"))
catc(Exceptioe
e.printStackTrace()
.
.---
.MGMT_VIEW--
.ANQING--
.DVD--
.SYSMAN--
2.3 서비스 사용_name:dave2.2 절의dbUrl을 다음과 같이 변경합니다.
String dbUrl = "jdbc:oracle:thin:@//127.0.0.1:1521/dave";
출력 결과:MGMT_VIEW--97
ANQING--94
DVD--93
SYSMAN--95
11g에서 다음과 같은 오류가 발생하면
테스트 실행 Java 클래스, 오류 보고:
java.sql.SQLException: The Network Adapter could not establish the connection
대응하는 jdbc connection driver를 교체할 수 있습니다. 홈페이지의 설명은 다음과 같습니다.
JDBC Thin Driver 11g Causes"Java.Sql.Sqlexception: Io Exception: The Network Adapter Could NotEstablish The Connection"While Connecting to Oracle Database 11g [ID947653.1]
Change the JDBC connection driver class inyour application server from:
oracle.jdbc.driver.OracleDriver
to
oracle.jdbc.OracleDriver
2.4 TNS name:dvd 사용
String dbUrl = "jdbc:oracle:thin:@dvd";
오류는 다음과 같습니다.
java.sql.SQLException: Unknown host specified
문제는 JVM에 oracle이 없기 때문입니다.net.tns_admin의 시스템property.
해결 방법은 다음과 같습니다.
메서드 1: VM을 시작할 때 다음 매개변수를 추가합니다.
-Doracle.net.tns_admin=D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
방법 2: 자바 코드에 추가:
System.setProperty("oracle.net.tns_admin","D:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\NETWORK\\ADMIN");
추가되면 JDBC에서 tnsnama를 정상적으로 사용할 수 있습니다.
.imporjava.sql.
.publiclasjd
StrindbUr"jdbc:oracle:thin:@dvd
.StrindbUr"jdbc:oracle:thin:@//...:/dave
.StrindbUr"jdbc:oracle:thin:@...::newccs
StrintheUse"dave
StrintheP"dave
Connectionul
Statemencon
ResultSernul
publijdbc
t
System.setProperty("oracle.net.tns_admin","D:\\app\\Administrator\\product\\..\\dbhome_\\NETWORK\\ADMIN"
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(
./Class.forName("oracle.jdbc.OracleDriver").newInstance(
DriverManager.getConnection(dbUrltheUserthePw
conc.createStatement(
catc(Exceptio
e.printStackTrace(
publibooleaexecuteUpdate(Strinsq
t
conn.executeUpdate(sql
returtru
catc(SQLExceptio
e.printStackTrace(
returfals
publiResultSeexecuteQuery(Strinsq
rnul
t
rconn.executeQuery(sql
catc(SQLExceptio
e.printStackTrace(
returr
publivoiclose
t
conn.close(
c.close(
catc(Exceptio
e.printStackTrace(
publistativoimain(String[arg
ResultSer
jdbconnejdbc(
rconn.executeQuery("selecfrodavwherrownum<"
t
whil(rs.next(
System.out.println(rs.getString("username")+"--"+rs.getString("user_id")
catc(Exceptio
e.printStackTrace(
다음은 자바에서 jdbc(thin 방식)를 통해 Oracle 데이터베이스를 연결하는 코드를 공유합니다.
package com.jdbc.OracleTest;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OracleJdbcConnectionTest {
/**
* by jarin
* @param args
*/
public static void main(String[] args) {
try {
// Jar : oracle , :\oracle\ora\jdbc\lib\ojdbc.jar
//
Class.forName("oracle.jdbc.driver.OracleDriver");
// ( :jdbc, : oracle:thin :@localhost::oracleDB)
String url ="jdbc:oracle:thin:@localhost::ora";
try {
//
Connection conn = DriverManager.getConnection(url,"scott","");
// Statement PreparedStatement
Statement st = conn.createStatement();
String sqlStr= "select ename from emp";
//
ResultSet rs = st.executeQuery(sqlStr);
//
while (rs.next()) {
System.out.println(rs.getString());
}
} catch (SQLException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 애플리케이션을 모든 SQL 데이터베이스와 연결그래서 오늘 이 기사를 통해 JDBC를 통해 Java 애플리케이션을 SQL 데이터베이스에 연결하기 위해 작성할 수 있는 각 줄을 설명하는 심층 가이드를 제공하여 그들과 모든 커뮤니티를 도우려고 합니다. JDBC는 J...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.