[TIL] 플레이데이터 인공지능 24기 DAY 99

황예빈·2022년 12월 20일
0

플레이데이터 TIL

목록 보기
14/21
post-thumbnail

JDBC

JDBC란?

Java DataBase Connectivity 라는 뜻으로
자바언어에서 데이터베이스 프로그램에 연결하게 해주는 Programing API

JDBC 객체 생성

일반 클래스의 객체 생성은 new 와 생성자 메서드를 사용한다.
new 와 생성자 메서드를 사용하는 객체 생성은 Java 구문에서 지원되는 일반적인 객체 생성 방법이다.

ex TV tv = new TV();

=> TV클래스의 객체 생성

그러나 클래스들 중에는 이 일반적인 객체 생성을 통해서 객체를 생성할 수 없는 것들도 있다.
이런 경우에는해당 클래스에서 제공되는 static 형 메서드를 호출하여 객체 생성을 대신 할 수 있다.
그렇다면 왜 생성자 메서드를 통해서 객체를 생성하지 않고 해당 클래스에서 제공되는 static 형 메서드를 호출하여 객체 생성을 대신하도록 하는 것일까?

  • 여러 이유로 자식 클래스의 객체 생성을 대신 하여 사용되도록 하려는 경우
  • 클래스의 객체 생성을 여러 번 하더라도 하나의 객체만을 생성하려는 경우

JDBC 의 경우 대부분의 API 가 인터페이스이다.
Connection, Statement, ResultSet, PreparedStatement etc.

Connection : createStatement(), getMetaData()……
Statement : executeQuery(), executeUpdate()……
ResultSet : next(), getXXX()……
이 API 들의 객체를 생성하기 위해서는 이 API 들을 상속하여 구현하고 있는 자식 클래스가 필요한데 그 자식 클래스들을 바로 JDBC 드라이버가 제공한다.
JDBC 드라이버라는 것은 JDBC 에서 인터페이스를 설계되어 있는
API 들의 자식 클래스들을 제공하는 프로그램이라고 할 수 있다.

하위 클래스(데이터베이스 시스템의 드라이버에 해당)에 따라 구현이 달라질 수
있기 때문에 API가 인터페이스

오라클,mysql의 API 들이 조금씩 다른이유가
JDBC API를 상속받아 각각의 드라이버에 맞게 다르게 구현하고 있기 때문

DB 연결

// TODO Auto-generated method stub
		Class.forName("oracle.jdbc.OracleDriver");
		String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:XE";
		String user = "scott";
		String passwd = "tiger";
		Connection conn = DriverManager.getConnection(jdbcUrl,user,passwd);
		
		System.out.println(conn.getClass().getName());
		DatabaseMetaData mdata = conn.getMetaData();
		System.out.println(mdata.getClass().getName());
		System.out.println("접속된 DB 서버:" + mdata.getDatabaseProductName());
		
		conn.close();

1. Driver 로드
DriverManager로 어떤 DB를 사용할 것인지 드라이버를 로드한다.
Class.forName("oracle.jdbc.OracleDriver");
각 DB마다 고유의 드라이버 이름이 있다.

2. Connection 얻기
DB를 결정 후, 연결을 위해 연결 정보(JDBC URL, ID, PW)를 입력한다.
String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "scott";
String passwd = "tiger";
Connection conn = DriverManager.getConnection(jdbcUrl, user, passwd);

3. Statement 작성
DB 서버에 SQL 명령을 전달하여 실행시키기 위한 객체를 생성한다.
Statement stmt = conn.createStatement();

4. SELECT 명령을 실행하고 실행 결과를 ResultSet에 담기
SELECT 명령을 실행한 결과는 JDBC 드라이버가 ResultSet이라는 객체로 반환한다.
ResultSet rs = stmt.excuteQuery("SELECT ename, sal FROM emp");

5. ResultSet 객체에서 값 꺼내오기
rs.next()
String name = rs.getString("ename")
int salary = rs.getInt("sal")

=> rs.next()실행 결과 테이블의 첫번째 행으로 커서 이동
getString("열이름" or 1) : 주어진 열이름에 해당하는 값을 가져옴(문자형 데이터)
getInt("열이름"or 2) : 주어진 열이름에 해당하는 값을 가져옴(정수형 데이터)

컬럼 타입에 따라서 메서드를 선택해주면 됨!

  1. 커넥션 반환하기
    반환 작업은 사용했던 객체를 역순으로 닫는다.
    rs.close();
    stmt.close();
    conn.close();

데이터의 삽입/삭제/수정

접속된 DB 서버에서 Query(SELECT 명령)를 실행하려면
Statement 객체의 executeQuery() 메서드를 사용

INSERT, DELETE, UPDATE, CREATE TABLE, DROP TABLE 등의 SELECT 명령 이외의 명령을 실행할 때는 executeUpdate() 메서드를 사용한다.

SELECT - executeQuery()
INSERT, DELETE, UPDATE, CREATE TABLE, DROP TABLE - executeUpdate()

Statement VS PreparedStatement

//Statement 사용

Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into student values ('둘리', 100)");
stmt.executeUpdate("insert into student values ('또치', 90)"); 

int delNum = stmt.executeUpdate("delete from student where name = '둘리'");
int updateNum = stmt.executeUpdate ("update student set score = 'dooly' where name = '둘리'");

String name = scan.nextLine();
int score = Integer.parseInt(scan.nextLine());// 받아들인 정수를 문자로변환

Statement stmt = conn.createStatement();
stmt.executeUpdate("insert into student values ('"+name+"','"+score+")");
int delNum = stmt.executeUpdate("delete from student where name = '"+name+"'");
int updateNum = stmt.executeUpdate ("update student set score = "+score +
 " where name = '"+name'")

Statement :

Statement stmt = conn.createStatement()

stmt.executeUpdate("sql") 안에 작성해줘야함

PreparedStatement pstmt = conn.prepareStatement("insert into student values (?, ?)");
pstmt.setString(1, name);
pstmt.setInt(2, score);
pstmt.executeUpdate();

PreparedStatement pstmt = conn.prepareStatement("delete from student where name = ?")
pstmt.setString(1, name);
int delNum = pstmt.executeUpdate();
PreparedStatement pstmt = conn.prepareStatement(
 "update student set score = ? where name = ?");
pstmt.setInt(1, score);
pstmt.setString(2, name);
int updateNum = pstmt.executeUpdate()

PreparedStatement :

1.PreparedStatement pstmt = conn.prepareStatement("sql") 안에 DML문 작성

  1. pstmt.setString()
    pstmt.setInt()
    등의 set함수 사용

  2. pstmt.executeUpdate()를 마지막에 꼭 사용해줘야함

Model View Controller 구현 패턴

MVC란 Model View Controller의 약자로 에플리케이션을 세가지의 역할로 구분한 개발 방법론이다.

비지니스 처리 로직과 사용자 인터페이스 요소들을 분리시켜 서로 영향없이 개발 하기 수월하다는 장점과 유지보수를 독립적으로 수행할 수 있다는 장점을 제공한다.

Model은 어플리케이션이 “무엇”을 할 것인지를 정의 한다.
Service Model 과 Domain Model 로 나뉜다.
Controller는 모델이 “어떻게” 처리할 지를 알려주는 역할을 하고 Model 과 View 사이에서 연결 역할을 하며 이 두 그룹의 결합도를 낮춰서 확장성을 증가시키도록 설계한다. View 는 사용자 인터페이스를 구현한다.

profile
Lv. 23

0개의 댓글