Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- java
- mybatis
- fastapi
- JSP
- sqldeveloper
- DB 스케쥴러
- ibatis
- eclipse
- 비교표현식
- select문
- javascript
- sqlMapClient
- spring
- Oracle
- sql
- directivesTag
- PYTHON
- androidstudio
- pyqt
- Git
- pagination
- sqlMapConfig
- pymssql
- anaconda
- 드라이브 연결
- error
- 파이썬
- form
- pl/sql
- form태그
Archives
- Today
- Total
기록하는 코더
[JAVA] 드라이브 연결 방식 본문
1️⃣일반 연결
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// oracle에만 접속할 수 있음 ==> 다른 데이터베이스 환경에선 실행불가
// JDBC 드라이버를 로딩하고 DB서버에 연결된 Connection 객체를 생성하는 메서드로 구성된 class
public class DButil {
static {
try {
// Class 파일은 소스파일을 컴파일을 한 파일
// 소스파일이 아닌 경우는 내용변경 불가
// text 파일에 연결 정보를 저장해서 입력해주는 방식으로 연결
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("드라이버 로딩 실패!");
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","DB접속아이디","DB접속패스워드");
} catch (SQLException e) {
System.out.println("DB 연결 실패 ! ");
return null;
}
}
}
2️⃣Properties 객체 이용
Properties는 Hashtable의 하위 객체이므로 key와 value의 형태!
package kr.or.ddit.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
// JDBC 드라이버를 로딩하고 DB서버에 연결된 Connection 객체를 생성하는 메서드로 구성된 class
// (dbinfo.properties 파일의 내용을 이용한 설정)
// 방법1) Properties객체 이용하기
public class DButil2 {
static Properties prop; // Properties 객체 변수 선언
// { // 인스턴스 초기화 블록 ==> 생성자보다 먼저 실행됨
// System.out.println();
// }
static { // static 초기화 블록
prop = new Properties(); // Properties 객체 생성
File f = new File("res/kr/or/ddit/config/dbinfo.properties");
FileInputStream fin = null;
try {
fin = new FileInputStream(f); // 파일 입력용 스트림 객체 생성
prop.load(fin); // 파일 내용 읽기
// Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName(prop.getProperty("driver"));
} catch (Exception e) {
System.out.println("드라이버 로딩 실패!");
e.printStackTrace();
}finally {
if(fin!=null)try {fin.close();}catch(IOException e) {}
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("user"),prop.getProperty("pass"));
} catch (SQLException e) {
System.out.println("DB 연결 실패 ! ");
return null;
}
}
}
properties 객체
더보기
package kr.or.ddit.basic;
import java.util.Properties;
public class PropertiesTest {
/*
Properties 객체
- Properties객체는 Map보다 축소된 기능의 객체라고 할 수 있다.
- Map은 key값과 value값에 모든 형태의 객체를 사용할 수 있지만
Properties 객체는 key값과 value값에 String만 사용할 수 있다.
- Map은 put(), get() 메서드를 이용해서 데이터를 저장하고 읽고하는 작업을 수행하지만
Properties는 setProperty(), getProperty() 메서드를 이용해서 읽고 쓰기 작업을 수행한다.
- Properties 객체는 데이터를 파일로 입출력 할 수 있다.
*/
public static void main(String[] args) {
// 객체 생성
Properties prop = new Properties();
// 제네릭을 사용x => String만 사용
prop.setProperty("name", "홍길동");
prop.setProperty("age", "20");
prop.setProperty("tel", "010-1234-5678");
prop.setProperty("addr", "대전");
int num = 30;
prop.setProperty("num", "" + num);
// prop.setProperty("num", String.valueOf(num));
// System.out.println(prop);
//---------------------------------------------
String name = prop.getProperty("name");
int age = Integer.parseInt(prop.getProperty("age"));
int num2 = Integer.parseInt(prop.getProperty("num"));
String tel = prop.getProperty("tel");
String addr = prop.getProperty("addr");
// float fff = Float.parseFloat("3.14f");
// double ddd = Double.parseDouble("3.14");
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
System.out.println("번호 : " + num);
System.out.println("전화 : " + tel);
System.out.println("주소 : " + addr);
System.out.println("---------------------------------------------");
/*
scan.next(), scan.nextLine()
Scanner에 자료가 있는지 확인하고 입력 -> buffer에 저장 -> buffer에 저장된 정보를 읽어옴
* next(), nextInt(), nextFloat()
- 공백, tap키, 엔터키를 기준으로 분리해서 분리된 데이터를 중 첫번째 데이터 하나를 반환한다.
* nextLine()
- 처음부터 엔터키까지 읽어간다.
- 엔터키를 뺀 데이터를 반환
buffer에 있는 입력값을 가져가고 입력 buffer에 엔터키값만 남음
- next(), nextLine(),nextFloat()는 데이터로 취급x
- 데이터가 없는 걸로 인식 => 입력
next(),nextInt()..인 경우
- 입력할때 이전 데이터를 가져가고 남은 데이터를 가져오려고 함
ex) 주소 : 대전시 중구 => 첫번째 데이터 하나를 가져가서 저장
중구 => 남은 데이터 (다음 데이터 저장에 사용됨 => 오류발생)
nextLine()의 경우
- 처음부터 엔터키값까지 읽어가야함 => 엔터키가 데이터!
- 입력을 하지 않았는데도 앞의 엔터키를 가져감
(엔터키를 제외한 데이터(공백)을 반환)
ex)
System.out.println("전화번호 >> ");
String tel = scan.next();
System.out.println("주 소 >> ");
String addr = scan.nextLine();
==> 주소에 빈 공백문자가 들어가게 됨
- 입력버퍼에 있는 엔터키를 없애주기 위해선 앞줄에 scan.nextLine();를 한번 더 써주면 해결됨
* 입력버퍼 비우기 : nextLine() 명령을 사용하기 이전에 next(), nextInt() 등의 명령이 사용된 후일 경우에 사용한다.
next() -> 입력버퍼 비우기 -> nextLine()
nextLine() 사용한 후엔 입력버퍼를 비울 필요x => 2번 사용하면 입력을 2번 하게 된다.
ex)
scan.nextLine();
System.out.println("전화번호 >> ");
String tel = scan.next();
System.out.println("주 소 >> ");
String addr = scan.nextLine();
*/
}
}
3️⃣ResourceBundle 객체 이용
ResourceBundle 예제
import java.util.ResourceBundle;
/*
ResourceBundle 객체 ==> 파일의 확장자가 .properties인 파일의 내용을 읽어와
key값과 value값을 분리해서 정보를 갖는 개체이다.
==> 읽어올 파일의 내용은 'key값=value값' 형태로 되어있어야 한다.
*/
public class ResourceBundleTest {
public static void main(String[] args) {
// ResourceBundle 객체를 이용하여 파일 내용 읽어오기
// ResourceBundle 객체 생성
// ==> 읽어올 파일을 지정할 때 '패키지명.파일명'만 기술하고 확장자는 기술하지 않는다.
// ( 이유 : 확장자는 항상 '.properties'이기 때문에 )
ResourceBundle bundle = ResourceBundle.getBundle("kr.or.ddit.config.dbinfo");
// bundle 객체 변수가 key값과 value값을 분리해서 갖고 있다.
// 읽어온 내용 출력하기
System.out.println("driver ==> " + bundle.getString("driver"));
System.out.println("url ==> " + bundle.getString("url"));
System.out.println("user ==> " + bundle.getString("user"));
System.out.println("pass ==> " + bundle.getString("pass"));
}
}
🚫 Caused by: java.util.MissingResourceException: Can't find bundle for base name kr.or.ddit.dbinfo, locale ko_KR
bundle 경로 설정이 틀렸을 때 뜨는 오류!
⇒ 경로 설정이 맞는지 체크해볼 것
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ResourceBundle;
// JDBC 드라이버를 로딩하고 DB서버에 연결된 Connection 객체를 생성하는 메서드로 구성된 class
// (dbinfo.properties 파일의 내용을 이용한 설정)
// 방법1) Properties객체 이용하기
public class DButil3 {
static ResourceBundle bundle; // ResourceBundle 객체 변수 선언
static { // static 초기화 블록
bundle = ResourceBundle.getBundle("kr.or.ddit.config.dbinfo");
try {
Class.forName(bundle.getString("driver"));
} catch (Exception e) {
System.out.println("드라이버 로딩 실패!");
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection(bundle.getString("url"), bundle.getString("user"), bundle.getString("pass") );
} catch (SQLException e) {
System.out.println("DB 연결 실패 ! ");
return null;
}
}
}
Properties 파일 생성하기
# 'key값=value값'와 같은 형식으로 작성한다.
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
user=DB접속아이디
pass=DB접속패스워드
1️⃣연결정보를 저장하는 소스파일 생성1 - res 소스폴더 생성
2️⃣New > Untitled Text File
3️⃣ text 파일을 res 폴더 내에 config 폴더를 만들어 저장
4️⃣properties는 key value 형식으로 작성
properties 파일 내에서 #은 주석 문장으로 사용!
'JAVA' 카테고리의 다른 글
[Java] Singleton 싱글톤 패턴 (0) | 2023.01.15 |
---|---|
[JAVA] parseInt와 ValueOf의 차이점 (0) | 2023.01.15 |
[JAVA] 오목 게임 (0) | 2023.01.11 |
[JAVA] 새로운 파일이 들어왔을 때 자동으로 새로고침 하는 설정 (0) | 2023.01.05 |
[Android Studio] 기본 예제 (0) | 2022.12.29 |