12월 1일 시험대비

안효빈·2022년 11월 30일
0

개인 공부

목록 보기
34/36

데이터입출력구현시험대비☣

  • SELECT문 언급하신거 보니까 그룹함수정도 한번 보는게 좋을거같음

  • MAX,MIN,SUM,AVG,COUNT 등등... 통계목적으로쓰는


체크리스트✅

  1. Connection과 Statement(어떻게 코드를 작성할건지), ResultSet을 활용하는 방법(어떤메소드이용하는지) + 커넥션풀을 활용할거면 어떻게 활용하는지(핵심 메소드, 주의사항)

  2. jdbc가 하는 역할, jdbc를 쓰는 방법

  3. prepareStatement와 그냥 statement의 차이(시험용으로는 핵심단어 4글자)

[참고] : https://velog.io/@ragnarok_code/DataBase-Statement%EC%99%80-Prepared-Statement-%EC%B0%A8%EC%9D%B4%EC%A0%90

  1. executeQuery와 executeUpdate의 활용 차이, 결과값이 어떻게 다른지

  2. SELECT문 기억더듬어서 해보기 -> 특히 그룹함수(sum, max, count, avg)

  3. CHAR와 VARCHAR2의 차이


0. Connection

  • java.sql.Connection를 통해 생성되는 객체

  • 데이터베이스와 JSP를 연결할 때에 필요함

  • 오토커밋 기능이 내장되어있음, 트랜잭션을 따로 처리하지 않아도 DB에 자동으로 커밋되는게 커넥션이 자동으로 해주기 때문임.
    (참고 : https://solbel.tistory.com/861)

Connection을 통해 DB로 연결하는 방법

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh", "1234");
Statement st = con.createStatement();

( Connection 객체를 만들면서 jdbc를 사용함 )

  • jdbc : Java DataBase Connectivity, 자바에서 제공하는 인터페이스로 데이터베이스와 자바 간에 데이터를 주고받을 수 있도록 해준다.

뒤에 kh와 1234부분 주의해서 보기🤡

jdbc 사용 방법

[출처] : https://ss-o.tistory.com/132

Class.forName 자체는 ()안에 넣은 클래스를 반환해주는 역할

드라이버 클래스를 반환하고

드라이버매니저라는 객체를 통해 getConnection메소드를 호출하며 Connection 생성

🔆강사님요약 : DriverManager는 정해진 곳과 연결을 수행해주는 클래스다

커넥션풀의활용방법


	private DBConnectionMgr pool;
	
	public PollMgr() {
		pool = DBConnectionMgr.getInstance();
	}

private로 DBConnectionMgr클래스로부터 객체 생성

기본 생성자에 pool(DBConnectionMgr에서 getInstance()를 실행한 반환값)을 초기화

해당 pool에 getConnection() 메소드를 실행한 결과(Connection형으로 반환)를

null로 초기화한 Connection객체에 넣어줌.


1. (Prepared)Statement

	Connection con; //지역변수는 인스턴스변수와 다르게 null로 자동 초기화가 되지 않음
	Statement st;
	ResultSet rs = null; 
	try{
		Class.forName("oracle.jdbc.driver.OracleDriver");
		con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "kh", "1234");
		st = con.createStatement();
		rs = st.executeQuery(
			"select dept_id, dept_title, national_name from department 
			join location on (location_id = local_code)
			join national using(national_code) ");

Statement

  • java.sql.Statement를 통해 생성되는 객체

  • Connection을 통해 연결된 객체에게 SQL문을 실행시킬 수 있다.

  • 이 객체를 생성하기 위해선 반드시 Connection이 먼저 생성되어야 함.

  • execute어쩌구를 통해 쿼리문을 돌림

🔅강사님요약 : statement는 구문을 파싱해서 sql문을 전송하는 역할

Statement의 주요 메소드❗❕

  • executeQuery(쿼리문) : SELECT문을 자바에서 돌리는 메소드, ResultSet타입의 결과물을 반환
  • executeUpdate(쿼리문) : INSERT, UPDATE, DELETE 문을 자바에서 돌리는 메소드, 몇개의 행이 실행됐는지 그 갯수를 반환하고, 해당 갯수를 보고 제대로 실행됐는지 확인함

prepareStatement와의 차이

🔅강사님요약 : prepareStatement는 원하는 데이터의 형태에 맞게 설정할 수 있도록 자리잡아주는 역할 (위치홀더)

근데 위치홀더 외에는 그냥 statement도 가능한 역할 아닌가?

예제

쿼리문은 정적인 결과를 가져오기 때문에 동적인 효과를 기대하기 위해서

request로 전달받은 변수를 넣게 되는데

문자열인 쿼리문을 작성할 때에 변수를 편하게 넣기 위한게 prepareStatement.

일단 전부 물음표로 떄려박아놓고

이후에 몇번째 물음표가 어떤 변수를 의미하는지 셋팅해줌

사용되는 메소드

setString(몇번째, 해당물음표에들어갈 값)

setInt(몇번째, 해당물음표에들어갈 값)

이처럼 타입에 따라 setXXX 메소드를 맞춰 활용한다.


2. ResultSet

  • 🔅강사님요약 : resultset은 이렇게 쿼리문을 돌리고 나서 결과물을 받아 활용해야하는데 그 결과를 저장해두는 역할
  • executeQuery 메소드의 반환 타입(SELECT문을 통해 조회한 결과물들 저장)

ResultSet을 활용하기 위한 메소드들

  • resultset.next() : resultset에 요소가 남아 있는지를 True False로 반환
  • getInt/String(내가SELECT한결과물에서 몇 번째 컬럼을 가져올지)

나올지 안나올지 애매한 SQL문처리과정

  1. parsing(코드 분석)

  2. bind(치환)

  3. execute(실행)

  4. patch(실행 후 인출)

[출처] : https://ssunws.tistory.com/44


3. 여러 줄의 처리과정

ArrayList나 Vector활용해서 자바빈 타입의 객체를 담음

저 객체 하나 하나의 안에는 여러 컬럼의 정보가 한 세트로 담겨있음(이름, 아이디, 연봉 등등)

rs.next()를 통해 다음 요소가 있는지 확인함과 동시에 다음 요소로 넘어감

setter를 이용해 자바빈 객체 안에 설정한 후 그걸 ArrayList나 Vector에 포장해서 담아놓음

마지막으로 차곡차곡 포장한걸 담은 ArrayList를 통쨰로 반환


4. 나올만하다고 짚어주신부분들

4.1. SYSDATE는 어떻게 되어있나?✅

  • 지나가듯이 말하셨는데 뭘 봐야할지 모르겠음, 일단 현재시간알려주는 기능

4.2. CHAR과 VARCHAR2는 어떤차이가 있나?✅

강사님 말씀

  • char(고정형) : 최대 2000바이트까지, 고정형이므로 설정한 값보다 적게 입력되면 나머지는 SPACE로 채워버림
  • varchar2(가변형) : 최대 4000바이트까지, 가변형이기떄문에 일단 크게 설정해도 사용자가 입력한 값만큼의 크기를 다룸

4.3. ORDERBY 함정 조심하기✅

  • ORDER BY를 안하면 순서대로 정렬된 결과를 얻지 못한다
profile
다들 화이팅

0개의 댓글