JDBC
✅ JDBC PROGRAMMING
Java Database Connectivity
JAVA에서 SQL 구문 자체를 넘겨서 RDB에서 원하는 동작을 실행하는 프로그래밍
JAVA String변수로 SQL문 작성
JDBC 프로그래밍 작업 순서
- Driver Manager을 통해 Connection 인스턴스를 얻는다.
- Connection을 통해 Statement을 얻는다.
- Statement을 통해 ResultSet를 얻는다.
Connection, Statement
- JAVA I/O Stream 내부 구현
- 소켓 프로그래밍 내부 구현
☑️ 정적으로 SQL에서 JAVA로, JAVA에서 SQL로
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class JDBCTest {
/**
* 1. 1000원 이상 산 group singer를 구하는 SELECT 문을 JDBC로 실행해보자.
* 2. Group_singer에 새로운 singer ”르세라핌”을 넣어 INSERT 문을 JDBC로 실행해보자.
*/
//RDB, mySQL 접근 정보
private static final String DB_URL= "jdbc:mysql://localhost:3306/chap_78";
private static final String DB_USER= "root";
private static final String DB_PASSWORD= "12341234";
public static void main(String[] args) {
//connection 만들기, connection close꼭 해줘야 함, autoclose
//DriverManager가 connection 만들어준다
//Statement는 SQL을 넣기 위해 필요하다.
try(Connection connection= DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
Statement statement= connection.createStatement();
){
//여기 안에 SQL을 넣는다.
//SQL에서 JAVA로 가져오기
String stringSQL= "SELECT *" +
"FROM group_singer G" +
" JOIN buy_history_1 B" +
" ON G.mem_id = B.mem_id" +
" WHERE B.price > 1000" ;
ResultSet resultSet= statement.executeQuery(stringSQL);
//resultSet의 다음줄이 없을 떄까지(false) 실행하세요
while(resultSet.next()){
String id= resultSet.getString("mem_id");
String name= resultSet.getString("mem_name");
long price= resultSet.getLong("price");
System.out.println("id:"+ id+ "name:"+ name+ "price:"+price);
}
//JAVA에서 SQL update
String sqlUpdate= "INSERT INTO group_singer(mem_id, mem_name, mem_number, addr, phone, height, debut_date)" +
"VALUES ('mem120', '르세라', 5, '서울', '01012345678', 171, '2013-06-13')";
statement.executeUpdate(sqlUpdate);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
☑️ 동적으로 data 받아오기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//Console에 User ID를 치면, 선호하는 도시로 가는 왕복 항공권 정보들이 출력되어야한다.
//(단, 출발지 ‘서울’이고 ID와 출발지/도착지, 출국시간/귀국시간 이 기록. )
public class JDBCTest2 {
//RDB, mySQL 접근 정보
private static final String DB_URL = "jdbc:mysql://localhost:3306/chap_80";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "12341234";
public static void main(String[] args) {
//SQL 구문 정의
String sqlQuery1 = "SELECT user_id, user_name, like_travel_place" +
" FROM users " +
" WHERE user_name = ? "; //WHERE이 입력될 값, 이 값으로 검색할 예정
String sqlQuery2 = "SELECT ticket_type, departure_loc, arrival_loc, departure_at, return_at, total_price " +
"FROM airline_ticket " +
" WHERE departure_loc = '서울' AND ticket_type = '왕복' AND arrival_loc = ? " +
" ORDER BY total_price";
System.out.println("유저 이름을 입력해주세요: ");
Scanner scanner = new Scanner(System.in);
String userName = scanner.nextLine();
try(Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
PreparedStatement preparedStatement1 = connection.prepareStatement(sqlQuery1);
PreparedStatement preparedStatement2 = connection.prepareStatement(sqlQuery2);
) {
preparedStatement1.setString(1, userName); //받아온 username
ResultSet resultSet = preparedStatement1.executeQuery();
String place = null;
while (resultSet.next()) {
place = resultSet.getNString("like_travel_place");
}
//userName으로 선호하는 곳 출력되도록
Optional<String> likeTravelPlace = Optional.ofNullable(place);
String likePlace = likeTravelPlace.orElseThrow(() -> new RuntimeException());
System.out.println("선호하는 곳은 '" + likePlace + "'");
//위 코드에서 얻어낸 likePlace로 항공권 출력하기
preparedStatement2.setString(1, likePlace);
ResultSet resultSet2 = preparedStatement2.executeQuery();
while (resultSet2.next()) {
String ticketType = resultSet2.getNString("ticket_type");
String departureLoc = resultSet2.getString("departure_loc");
LocalDate departureAt = resultSet2.getDate("departure_at").toLocalDate();
String arrivalLoc = resultSet2.getString("arrival_loc");
LocalDate arrivalAt = resultSet2.getDate("return_at").toLocalDate();
System.out.println("type: " + ticketType + ", 출발지: " + departureLoc + ", 도착지: " + arrivalLoc
+ ", 출국 시간: " + departureAt + ", 출국장소: " + arrivalAt);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
This post is licensed under CC BY 4.0 by the author.