Jam's story
[JDBC] days02-db에 연동하기 위한 클래스 라이브러리 생성 본문
JDBC
데이터베이스 연동하는 자바 표준 인터페이스
인터페이스 :
상수와 추상메소드 포함
default 메소드 포함 (Java 8)
private 메소드 포함 (Java 9)
static 메소드 포함 (Java 9)
데이터베이스에서 연결과 작업을 하기 위한 자바 표준 인터페이스
JDBC 를 사용하여 DB에 연결하는 순서
1. JDBC 드라이버 로드
Class.forName()
2.Connection 객체 얻어오기
DriverManager.getConnection()
3.필요한 조작(CRUD)
4.Close
Connection객체.close()
위의 순서에 맞춰서 오라클서버에 scott/tiger 로 DB에 연결하는 전체 코딩을 main() 메서드에 하시고, 연결된 Connection 객체 정보를 출력하고 Connection 객체 연결 상태를 true, false로 출력하는 코딩을 하세요.
package jdbcPro;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class Ex05 {
public static void main(String[] args) {
// DB 연동 순서
String className = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "SCOTT";
String password = "tiger";
Connection conn = null;
Scanner sc = new Scanner(System.in);
System.out.println("부서 번호를 입력하세요 >>");
int vdeptno = sc.nextInt();
String sql = "SELECT * "
+ " FROM emp "
+ " WHERE deptno =" + vdeptno
+"ORDER BY ename ASC";
Statement stmt = null;
try {
Class.forName(className);
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement();
//java.sql.SQLSyntaxErrorException
// at jdbcPro.Ex05.main(Ex05.java:35) 35번줄에서 쿼리문법 오류
//sql에 name 칼럼명이 틀려서 바꿈
ResultSet rs = stmt.executeQuery(sql);
// boolean rs.next() 리절트셋 안에 다음 레코드가 있니? true/ false
if( rs.next() ) {
// 다음(next) 레코드를 읽어와서 출력.
int empno = rs.getInt(1);
String ename = rs.getString(2);
String job=rs.getString(3);
int mgr = rs.getInt("mgr");
//날짜형은 String 으로 받아도 된다.
String hiredate = rs.getString(5);
//number(7,2)는 실수형태이기 때문에 double로 바꾸어야함
//int sal = rs.getInt(6);
double sal=rs.getDouble(6);
//int comm = rs.getInt(7);
Double comm = rs.getDouble(7);
int deptno = rs.getInt(8);
System.out.printf("%d\t %s\t %s\t %d\t %s\t %.2f\t %.2f\t %d\t",
empno, ename, job, mgr, hiredate, sal, comm, deptno);
System.out.println(empno);
}else {
System.out.println(" 읽을 레코드는 없습니다. ");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
// 4. close
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} //try
} // finally
System.out.println( " END ");
} // main
} //
db에 연동하기 위한 클래스 라이브러리 생성
com.util.DBconn.java
->작업을 편하게 하기 위해 라이브러리를 만듬
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// SingleTon 선언
public class DBconn {
private DBconn() {};
//private로 잡아서 외부에서 접근하지 못하도록
private static Connection connection =null;
public static Connection getConnection() {
//null이면 생성해서 돌리고 아니면 반환
if(connection==null) {
String className="oracle.jdbc.driver.OracleDriver";
//내꺼가 아닌 다른 서버 다른 디비랑 연결할 수 도 있다.
String url="jdbc:Oracle:thin@localhost:1521:xe";
String user="scott";
String password="tiger";
try {
Class.forName(className);
connection =DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
//드라이버 로딩오류
e.printStackTrace();
}catch (SQLException e) {
//커넥션오류 디비 연결 오류
e.printStackTrace();
}
}
return connection;
}
//오버로딩
public static Connection getConnection(String url, String user, String password) {
//null이면 생성해서 돌리고 아니면 반환
if(connection==null) {
String className="oracle.jdbc.driver.OracleDriver";
//내꺼가 아닌 다른 서버 다른 디비랑 연결할 수 도 있다.
//className 도 바꾸면 오라클이 아닌 다른 dbms 사용하겠다는 뜻
try {
Class.forName(className);
connection =DriverManager.getConnection(url,user,password);
} catch (ClassNotFoundException e) {
//드라이버 로딩오류
e.printStackTrace();
}catch (SQLException e) {
//커넥션오류 디비 연결 오류
e.printStackTrace();
}
}
return connection;
}
public static void close() {
try {
if(connection !=null &&!connection.isClosed()) {
connection.close();
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
connection=null; //중요하다 null 안붙이면 나중에 문제생김
}
} // class
강사님 코드
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// SingleTon 선언
public class DBconn {
private static Connection connection = null;
private DBconn() { }
public static Connection getConnection(){
if ( connection == null) {
String className = "oracle.jdbc.driver.OracleDriver" ;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "scott";
String password = "tiger";
try {
Class.forName(className);
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} // if
return connection;
} // getConnection
// [오버로딩] , 오버라이딩
public static Connection getConnection(String url, String user, String password){
if ( connection == null) {
String className = "oracle.jdbc.driver.OracleDriver" ;
try {
Class.forName(className);
connection = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} // if
return connection;
} // getConnection
public static void close() {
try {
if ( connection != null && !connection.isClosed()) {
connection.close();
} // if
} catch (SQLException e) {
e.printStackTrace();
} // try
// *****
connection = null;
} // close
} // class
객체를 불러옴
package days02;
import java.sql.Connection;
import com.util.DBconn;
public class Ex02 {
public static void main(String[] args) {
//hr계정으로 접속
Connection conn=DBconn.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","lion");
System.out.println(conn);
DBconn.close();
System.out.println("end");
Connection conn=DBconn.getConnection();
System.out.println(conn);
DBconn.close();
System.out.println("end");
//oracle.jdbc.driver.T4CConnection@768b970c
conn=DBconn.getConnection();
System.out.println(conn);
DBconn.close();
System.out.println("end");
//oracle.jdbc.driver.T4CConnection@175b9425
//close()에 의해서 닫혔기 때문에 새로운 객체 불러옴
}
}
ConnectionString.properties 파일을 읽어서 url, user, password 가져와서
Connection 객체를 DBconn클래스를 사용해서 얻어오는 코딩
Properties 컬렉션 클래스
ConnectionString.properties 파일
만약에 다른 사용자로 들어가려면 이거 바꾸면 된다.
#>JDBC \uD658\uACBD\uC124\uC815<
#Fri Mar 25 14:38:27 KST 2022
user=scott
password=tiger
url=jdbc\:oracle\:thin\:@localhost\:1521\:xe
className=oracle.jdbc.driver.OracleDriver
package days02;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.Properties;
import com.util.DBconn;
public class Ex02_02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//ConnectionString.properties 파일을 읽어서 url, user, password 가져와서
//Connection 객체를 DBconn클래스를 사용해서 얻어오는 코딩
//Properties 컬렉션 클래스
//Map인터페이스를 구현한 클래스
//key+value 한쌍 entry
//String /String
//파일/저장 읽기 메소드
//파일에 있는 url, user, passwd 읽어와서 파일 실행
Properties p=new Properties();
String fileName=".\\src\\com\\util\\ConnectionString.properties ";
try {
Reader reader=new FileReader(fileName);
p.load(reader);
String url=p.getProperty("url");
String user=p.getProperty("user");
String password=p.getProperty("password");
Connection conn=DBconn.getConnection(url,user,password);
System.out.println(conn);
DBconn.close();
} catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
System.out.println("end");
}//main
}//class
'JDBC' 카테고리의 다른 글
[JDBC]days04 - 게시판 만들기 (DTO ,DAO) (0) | 2022.05.09 |
---|---|
[JDBC] days02- (조회,수정,삭제,검색) (0) | 2022.05.04 |
[JDBC] days02 - 클래스 select (0) | 2022.05.03 |
[JDBC] days01 (0) | 2022.05.02 |
이클립스 환경 설정 (0) | 2022.05.02 |
Comments