✅ CRUD
C create : insert | 사용자 입력을 저장할 수 있는가 |
R Retrieve : select | 값을 꺼내는 것 |
U : update | 값 수정 |
D : delete | 값 삭제 |
👉 기본적인 질의문을 알았으니 데이터를 자바에서 받고 자바스크립트에서 이용하는 흐름을 알아보기
✅ 자바 JDBC API
#️⃣ JDBC 용도
- 각 DBMS마다 불러오는 환경이 다른데 하나의 UI로 모아서 폼을 제공해줘야함. (사용자는 SQL을 모르고 UI폼만 보고 작성)
- 개발자는 사용자의 입력내용을 뽑아서 다시 SQL문을 만들어서 저장하도록 해야 함.
👉 쿼리를 자바코드로써 사용할 수 있도록 해야 함 ▶ 언어에서 이용할 수 있는 도구는 api밖에 없음 ▶ api를 누가 제공하느냐? ▶ 플랫폼을 이용할 수 있도록 각 DB업체에서 api를 제공했으나 서로 다른 DB API를 사용하는데 문제가 있음
👉 통합할 수 있는 API를 만들도록 함 == jDBC driver (api를 사용하는 부분을 단일화)
(* driver : 구동시켜주는 코드를 갖고있는 것. 즉 JDBC를 실행시켜주는 코드를 갖고 있는 드라이버를 이용)
1. 드라이버 로드하기 DriverManager
2. 연결 생성하기 Connection
3. 문장 실행하기 Statement
4. 결과 집합 사용하기 Resultset
👉 위 내용은 기본 api 원리
👉 나중에는 MyBatis같은 api 라이브러리를 이용하여 이 과정을 직접쓰지 않고 줄일 수 있음.
#️⃣ MyBatis 란 객체지향 언어인 Java 와 SQL Based 인 관계형 데이터베이스(RDBMS) 사이의 데이터를 다루는 방식의 괴리를 해결하기 위해 만들어진 Persistence Framework 의 일종 |
#️⃣ JDBC 코드의 이해
1. Class.forName
- 드라이버가 메모리에 올라감
- id, pw, 서버 정보넣음
2. Conneciton
- 인증해서 DBMS와 연결
3. Statement
- 레코드 단위 생성
4. ResultSet
- 문장실행
- ResultSet은 받은 레코드를 저장할 수 있는 공간을 가지고 있음
5.rs.next();
- 서버에서 레코드 한줄 가져오기. ResultSet통에 담기
- EoF를 만나면 false반환
6. String title = rs.getString("title");
- 컬럼명 "title"을 문자열로 넘겨서 String 타입 title변수에 담는다.
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@db.newlecture.com:1521/xepdb1"; //약속된 사용문장
// String url = "jdbc:oracle:thin:@localhost:1521"; 내 컴퓨터에서 꺼내쓸때의 코드
String sql = "SELECT * FROM MEMBER ORDER BY ID";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"ID","PW");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(sql);
// (자바 연습용)속성명을 다 받아서 SPLIT으로 나누고 대입해서 데이터 읽어보기...!
// String tuples = "id,"+"name,"+"phone,"+"age,"+"address,"+"pwd";
// String[] tuple = tuples.split(",");
//
// while(rs.next()) {
//
// for(int i=0;i<tuple.length; i++) {
// String t = tuple[i];
// String name = rs.getString(t);
// System.out.printf("%s\t",name);
//
// if(i!=0 && i%5==0) //줄바꿈용 조건문
// System.out.println();
// }
// }
while (rs.next()) {
String id = rs.getString("id");// 컬럼명은 소대문자를 구분하지 않는다. sql문이 전체조회여도 속성명이 name이면 name만 출력
String name = rs.getString("name");
String pwd = rs.getString("pwd");
System.out.printf("%s\t",id);
System.out.printf("%s\t",name);
System.out.println(pwd);
}
rs.close();
st.close();
con.close();
}
❎ DELETE 문에 SET을 쓸 수 있을까?
DELETE 문은 행을 삭제하는 데 사용되고, SET 문은 열의 값을 수정하는 데 사용. 두 문장은 서로 다른 용도를 가지며, 특정 상황에 맞게 사용
DELETE 문: DELETE 문은 데이터베이스 테이블에서 특정 레코드(행)를 삭제하는 데 사용됩니다. 일반적으로 WHERE 절을 사용하여 어떤 레코드를 삭제할지 지정합니다. DELETE 문은 데이터베이스에서 실제로 행을 제거하는 작업입니다.

SET 문: SET 문은 주로 UPDATE 문에서 사용됩니다. UPDATE 문은 테이블 내의 기존 레코드를 수정하는 데 사용되며, SET 절은 어떤 열의 값을 변경할지 지정합니다. UPDATE 문은 데이터의 수정에 사용되지만, 테이블의 행을 삭제하지는 않습니다.

⏩ 조건문은 어디에 걸어야할까?
▶ 자바에서 데이터를 분류하는게 아닌, SQL에서 데이터를 셀렉하여 넘겨준다
Q. 200살 이하의 리스트만 뽑는다면?
public static void main(String[] args) throws ClassNotFoundException, SQLException {
String url = "jdbc:oracle:thin:@db.newlecture.com:1521/xepdb1";
String sql = "SELECT * FROM MEMBER WHERE AGE <200 ORDER BY ID"; //SQL에서 데이터 셀렉
// API문장 생략
int count =0; //인원수 세는 용
while (rs.next()) {
String id = rs.getString("id");
String name = rs.getString("name");
int age = rs.getInt("age");
String pwd = rs.getString("pwd");
//null값을 0으로 받아오는것도 제외함
// if (age < 200 && age!=0) { -- 자바에서 필터링하기보다 SQL문 (데이터관리)으로 필터링하여 출력한다
System.out.printf("%s\t", id);
System.out.printf("%s\t", age);
System.out.printf("%s\t", name);
System.out.println(pwd);
count++;
// }
}
System.out.println(count);
rs.close();
st.close();
con.close();
}
✅ 매핑하는 법
#️⃣ 연산자 - 문자열 더하기
: 덧셈은 무조건 숫자만 연산
: 따라서 SELECT AGE+'100' AGE FROM MEMBER; // 더할수있는 숫자로 전환해서 연산함
SELECT 'age is '|| AGE ADDED_AGE FROM MEMBER WHERE AGE IS NOT NULL;
SELECT NAME ||'('||ID||')' FROM MEMBER; -- 문자열 더하기 연산자
SELECT NAME ||'('||ID||')'||'_'|| AGE FROM MEMBER; -- AGE는 연산불가
SELECT AGE+1 ||'('||ID||')'||'_'||NAME FROM MEMBER; -- 연산자 앞에서 나와야 +1 가능
: ||연산자가 시작되는 순간부터 뒤는 문자열이 된다고 보면 된다.
: from member은 테이블이므로 그 앞까지만 쿼리문이라 생각하면 이해하기 쉬움. 문장 전체를 +로 잇는게 아니라 셀렉문 자체를 from table에서 뽑아오는 것이므로 || from table로 할 필요가 없다!
SELECT NAME,AGE FROM MEMBER WHERE AGE IS NULL;
SELECT NAME,AGE ||'THIS AGE IS NULL' FROM MEMBER WHERE AGE IS NULL;
#️⃣ 연산자 - 비교연산자
*** null은 특수한 의미의 키워드이므로 IS NULL, IS NOT NULL로 비교해야 한다.
'😵 ~23.11.10' 카테고리의 다른 글
0811 | SQL ROWNUM, SUBSTR(), ORDER BY, GROUP BY (0) | 2023.08.13 |
---|---|
0810 | 관계연산자, 패턴비교 연산자, 정규식 (0) | 2023.08.13 |
0808 | Oracle SQL 데이터타입 / 명령어 (0) | 2023.08.08 |
0807 | Oracle SQL 기초개념 (0) | 2023.08.08 |
0803-04 | gameCanvas와 Boy객체 클래스 연결 및 각 부분에 맞는 메서드 생성하기 (0) | 2023.08.07 |