광산에서
광산밖에서 요청하는 사람 : 프로그램
광산 안밖을 연결하는 선 : 커넥션 Connection
선으로 왔다갔다하며 전달해주는 수레 : Statement
광산 안의 광부들 : 데이터베이스
인서트 시켰으면 statement 에 1을 담아서 작업객체에게 보내줌
쿼리문 dml 하고 select
dml은 광부만 일하면 끝이 나는 작업이다. 그런데 그 일을 처리했는지 확인할 수 없어서 위에서 지금 검정색 돌들을 깨뜨려달라고 했다. 아래서는 까만 돌들을 다 없애버렸다. statement 에 몇개가 제거되었는지 보내주기로 약속을 함.
그래서 int result = stmt.executeUpdate(sql);
석탄이 몇개있냐고 물어봤을 때 그 개수를 적어서 보내줘야 한다. 이때는 『ResultSet』 에다가 집어넣어서 데이터를 넘겨줘야 한다. 크게 이런 과정들을 거친다고 보면 된다.
커넥션은 노력/시간/비용 많이 드는 작업이다. 광부들이 들어갈 때마다 레일을 다시 깔아주는 것은 매우 비효율적. 그런데 한 번 깔아놓은 레일을 활용하게 되면 편하게 왔다갔다가 가능하다. (싱글톤 패턴을 활용)
익스큐트업데이트 메소드 executeUpdate() 는 적용된 행의 개수를 반환하고 익스큐트쿼리executeQuery()는 select 한 결과와 연결짓고 그 결과를 가져오는 것. 그래서 DB와 연결이 끊기면 가져온 결과(객체 리저트셋 ResultSet)를 처리할 수 없게 된다.
dbconn.close() 해버리면 얻어낼 수 없다. 그래서 끊기 전에 가져와야 한다.
▼
하....티스토리 아직 어떻ㄱ ㅔ하는건지 참 어렵다^^ 표랑 병렬로 문자 넣고 싶은데 넣을 수가 없죠?
1 | 이 | 191 | ||
2 | 박 | 273 | ||
3 | 김 | 545 |
□ 만약에 이게 ResultSet , 즉 위에 있는 표라고 치면
▼
▶□□□□□
□□□□□
이렇게 가져오는 것이다. 레코드의 몇 번째 컬럼...~~~
/*
*
*
* JDBC01의 DBconn*/
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
public class DBconn
{
// 변수 선언 (커넥션은 연결객체)
private static Connection dbConn;
// -- 자동 null 초기화
// 메소드 정의 → 연결
public static Connection getConnection()
{
// 한 번 연결된 객체를 계속 사용
// 즉, 연결되지 않은 경우에만 연결을 시도하겠다는 의미
// → 싱글톤(디자인 패턴)
if(dbConn == null)
{
try
{
String url ="jdbc:oracle:thin:@ip주소:1521:xe";
//--『@ip주소』 는 오라클 서버 ip 주소를 기재하는 부분 원격지의
// 오라클이 아니라 로컬의 오라클 서버일 경우는 『localhost』 이나
// 『127.0.0.1 과 같이 loop back address 로 기재 가능
// 『1521 은 오라클 리스터 기본 Port Number
// 『xe 는 오라클 SID(Express Edition 은 xe)
String user = "scott"; // -- 오라클 사용자 계정 이름
String pwd = "tiger"; // -- 오라클 사용자 계정 암호
Class.forName("oracle.jdbc.driver.OracleDriver"); // class 라는 이름의 클래스에서 forName 메소드를 호출
// --OracleDriver 클래스에 대한 객체 생성
dbConn = DriverManager.getConnection(url, user,pwd);
//클래스명.메소드이름 이니까 static 메소드이다
// 오라클 서버 실제 연결
// 갖고 있는 인자값(매개변수)은 오라클 주소, 계정명, 패스워드
} catch(Exception e) // ClassNotFoundException, SQLException
{
System.out.println(e.toString());
//-- 오라클 서버 연결 실패 시 오류 메세지 출력 부분
}
}
return dbConn; // 연결된 게 있으면 그대로 쓰겠다. -- 구성된 연결 객체 반환
}
// getConnection() 메소드의 오버로딩 → 연결
public static Connection getConnection(String url, String user, String pwd)
{
if(dbConn == null)
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver"); // 오라클 드라이버라는 thin 드라이버를 활용하겠다!
dbConn = DriverManager.getConnection(url, user, pwd);
} catch(Exception e)
{
System.out.println(e.toString());
}
}
return dbConn;
}
// 메소드 정의 → 연결 종료하는 메소드 리턴자료형 void
public static void close()
{
// dbConn 변수(멤버 변수)는 Database 가 연결된 상태일 경우 Connection을 갖는다
// 연결되지 않은 상태라면 null을 갖는다.
if (dbConn != null)
{
try
{
// 연결 객체의 isClosed() 메소드를 통해 연결 상태 확인
if(!dbConn.isClosed()) //연결객체가 닫혀있는 상황이 아니라면 이라는 뚯
dbConn.close();
} catch(Exception e)// ClassNotFoundException, SQLException
{
System.out.println(e.toString());
}
}
dbConn = null;
// -- 연결 객체 초기화
}
}
우선 private static 으로 Connection 타입의 전역변수 dbConn 선언해준다.
자동 null 초기화. 싱글톤 디자인이란 것이 한 번 연결된 connection 객체를 계속 쓴다는 말인가
만약 dbConn 이 null 이라면
Class.forName("oracle.jdbc.driver.OrableDriver");
로 오라클드라이버 클래스 객체 생성하고 .. 이 부분이 헷갈림
일반적으로 클래스 객체 생성할 때처럼 생성하는 게 아니라서 어색
어쨋든 DriverManager 객체를 생성했으니까 이걸로
Driver Manager.getConnection(url,user,pwd); 로 connection 을 얻고 그것을 dbconn 에 대입한다.
여기서 url은 jdbc:oracle:thin:@ip주소:1521:xe
user 는 scott pwd 는tiger
이제 dbConn 은 null이 아니다
return dbconn 해주고 마무리
아래 public static Connection getConnection(String url, String user, String pwd) 는
getConnection 오버로딩한 메소드
만약 dbconn 이 null 인 상태라면 dbconn 에 Driver Manager.getConnection(url,user,pwd)
한 결과를 대입한다.
연결을 종료하는 메소드는
public static void close() 메소드.
만약 dbconn 이 null 이 아닌 상태라면 즉 connection 을 가지고 있다면
if(!dbconn.isClosed()) 으로 dbconn 이 닫혀있지 않은 상태라는 것을 다시 한 번 확인한 후에
dbconn.close() 로 커넥션을 종료한다.
그런 후 connection 을 갖기 이전의 상태인 dbconn = null; 로 다시 초기화시켜준다.
아래는 위와 같은 기능의 클래스와 메소드이지만
위에서는 예외처리방법이 try ~ catch 였다면
아래 코드는 throws 로 처리했다.
throws SQLException 또는 throws ClassNotFoundException
/*==============
* DBConn.java
* - 예외 처리 방법을 try ~ catch → throws
* ============*/
package com.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBconn
{
private static Connection dbConn;
public static Connection getConnection() throws ClassNotFoundException, SQLException
{
if (dbConn == null)
{
String url = "jdbc:oracle:thin:@000.000.000.000:1521:xe";
String user = "scott";
String pwd = "tiger";
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn = DriverManager.getConnection(url, user, pwd);
}
return dbConn;
}
public static Connection getConnection(String url, String user, String pwd) throws ClassNotFoundException, SQLException
{
if (dbConn == null)
{
Class.forName("oracle.jdbc.driver.OracleDriver");
dbConn = DriverManager.getConnection(url, user, pwd);
}
return dbConn;
}
public static void close() throws SQLException
{
if (dbConn != null)
{
if (!dbConn.isClosed()) // sqlexception
{
dbConn.close();
}
}
dbConn = null;
}
}
// end dbConn
'📚Study Note > JDBC' 카테고리의 다른 글
[ JDBC ] MemberDTO │ MemberDAO │ MemberMain (0) | 2021.04.22 |
---|