일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 실행파일만들기
- oracle datatype
- scanner 연습문제
- js
- 이클립스
- [Eclipse] 이클립스 마켓플레이스 (Marketplace) 사용방법
- 톰캣 9.0 설치
- strtotime()
- Oracle
- id 체크
- ER 마스터 사용법
- 자바
- Nexacro
- 개발 일기
- 자바스크립트
- 웹에 데이터를 전송하는 방법
- 코드 처리 시간
- 자동 배포
- 오라클 초기 셋팅
- DDL
- CMD
- 코드이그나이터
- php 날자 함수
- github
- PLSQL 설치
- 코드 정리
- php
- 기초 HTML
- 이클립스 프로젝트 변경
- 이클립스 서버연동
- Today
- Total
Chillax in dev
[JDBC]활용 : JDBC 기초 이해 + insert, select, update, delete 구현 본문
[JDBC]활용 : JDBC 기초 이해 + insert, select, update, delete 구현
Seong Story 2020. 7. 14. 00:17[JDBC] 활용 01 : JDBC 이해하기
- JDBC (Java Database Connectivity)는 자바에서 DB에 접근할 수 있도록 하는 자바의 API이다. 참고로 자바 API는 자바를 활용하여 쉽게 원하는 기능들을 구현할 수 있도록 한 클래스 라이브러리의 집합이다. JSP 프로그래밍을 하면서 데이터베이스와 관련된 작업을 처리할 수 있게 한다. 즉 JDBC의 공부법은 의미를 이해하고 잘 가져다 쓰면 장땡이다.
-API(Application Programming Interface):응용프로그램 운영페제나 데이터베이스 관리 시스템과 같은 시스템으로 프로그램과 통신할 때 사용되는 언어나 메시지 형식을 가진다.
-JDBC 프로그래밍 순서.
- JDBC 드라이버를 로딩한다.
- 데이터베이스에 연결한다.
- SQL 실행을 위한 Statement(또는 PreparedStatement)객체를 생성한다.
- SQL을 실행한다.
- SQL 실행결과를 받아서 처리한다.
- Statement(또는 PreparedStatement)를 종료한다.
- 데이터베이스 연결을 종료한다.
- 우선 공부하기전에 원래 DB에 접근할 때 여러 가지 설정들을 회상해보자. DB와 connection상태. jar 파일 확인, 드라이버 생성, 등등 이클립스에서 연결을 수동으로 해준후 sql을 동작할 수 있었다. 이번엔 클래스 속에서 이런 DB와의 소통을 하려는 공부이다. 이클립스에선 이러한 초기 세팅과 SQL을 다 명령으로 선언하여 처리해주고 나아가 해당 객체에 값을 전달하고 받아오는 형식으로 말 그대로 DB와 Java의 동작들을 연결하여 사용한다. 아래의 예제들을 보며 암기해도 좋고 템플릿으로 지정하는 것도 좋겠다.
- JDBC 연결하기
- Connection con : DB와 자바를 연결하는 클래스,
- url, id, pw ,driver 값 : 이들을 직접 지정해줘야 한다. (보는 방법은 아래에 정리돼있어요!)
- Class.forName(driver) : 데이터베이스 연결용 드라이버 도구 세팅(선택) , 오라클 드라이버 즉 초반에 설정해주었던 ojdb6.jar 선택한 것 (경로는 아래 정리해두었어요!)
- con.close() :만약 연결이 끊어진다면 con객 체를 닫아서 마무리한다.
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
|
package JDBC01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBC_Connect {
public static void main(String[] args) {
//자바에서 지원하는 데이터베이스와 자바의 연결 클래스: Connection 객체
Connection con = null;
//연결 드라이버 메니저가 연결해준 연결 인스턴스를 con 변수에 저장
//sql에선 커넥션이랑 이거저거 해줬잖아 그걸 다 명령어로 쳐줘야함.
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String id ="scott";
String pw ="tiger";
String driver = "oracle.jdbc.OracleDriver";
//con 엔 파라미터로 url(data source source 마우스우 프로퍼티로 가서 커넥션 유알엘 확인)
id pw 씀 try {
Class.forName(driver); // 에드케치 2번쩨걸로함.
추가해준단것 드라이브 연결 안됬을 떄 용도 con = DriverManager.getConnection(url,id,pw);
System.out.println("연결성공");
} catch (SQLException e) {
System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 연결 정보 오류");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 클래스 파일 오류");
e.printStackTrace();
}catch (Exception e) {
System.out.println("별도의 사유로 연결 실패");
e.printStackTrace();
}
// 만약 연결이 안되게되었다면 열려있는 con객체를 닫아야한다.
if(con!= null)
try {
con.close();
System.out.println("데이터베이스가 잘 종료되었다.");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
cs |
- Data source Explorer> Database Connection> xe(생성한 DB) 마우스 우> propertirs> Driver propertirs
- 드라이버 연결 오류 시 jar문제 일수 있다.
추가 경로: C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
[JDBC] 활용 02 : JDBC insert, select, update, delete 구현하기!
- 이제 본격적으로 DB에 SQL을 보내보고 결과를 받아오고 Java코드 속에 SQL을 녹이는 방법을 배워보자.
<테이블 생성>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
-- 연습용 table cumtomer 생성 및 삽입!
create table customer(
num number(3),
name varchar2(10),
email varchar2(20),
tel varchar2(15)
);
insert into cost values(1,'홍길동','a1@gmail.com','010-5223-2233');
insert into cost values(2,'권성민','a2@gmail.com','010-7227-4532');
insert into cost values(3,'김수완','a3@gmail.com','010-7327-5533');
insert into cost values(4,'정몽주','a4@gmail.com','010-4627-8532');
insert into cost values(5,'유관순','a5@gmail.com','010-7227-8533');
select * from customer;
|
cs |
<connection 구현>
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package JDBC01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class JDBC02_Select {
public static void main(String[] args) {
//클래스가 달라지면 연결 다시 해야한다.
//자바에서 지원하는 데이터 베이스와 자바의 연결 클래스 Connection객체
Connection con = null;
//PreparedStatement클래스
//데이터 베이스에 sql문을 전송하고 , 결과를 얻어내는 역할을 하는 클래스
// 항상 con과 같이다니는놈임.
PreparedStatement pstmt = null;
//PreparedStatement의 결과를 받아 저장하는 클래스 ->ResultSet
ResultSet rs =null;
//연결 드라이버 메니저가 연결해준 연결 인스턴스를 con 변수에 저장
//sql에선 커넥션이랑 이거저거 해줬잖아 그걸 다 명령어로 쳐줘야함 자바는
String url ="jdbc:oracle:thin:@localhost:1521:xe";
String id ="scott";
String pw ="tiger";
String driver = "oracle.jdbc.OracleDriver";
try {
Class.forName(driver); // 에드케치 2번쩨걸로함. 추가해준단것 드라이브 연결 안됬을 떄 용도
con = DriverManager.getConnection(url,id,pw);
System.out.println("연결성공");
String sql= "select * from cost";
//con과 pstmt를sql 명령과 함께 연결합나다.
pstmt =con.prepareStatement(sql);
rs=pstmt.executeQuery(); //select만씀
//rs.next(); //rs.next();
// 다음 레코드로 이동하라! 다음레토드가 있다면 트루 아님폴스 리턴 다음 레코드의 유무 할 수 있다. System.out.println("번호\t이름\t이메일\t\t전화번호");
System.out.println("----------------------------------------");
while(rs.next()) { //레코드가 있음 계속 반복
int num =rs.getInt("num");
String name = rs.getString("name");
String email =rs.getString("email");
String tel = rs.getString("tel");
System.out.printf("%d\t%s\t%s\t%s\n",num,name,email,tel);
}
} catch (SQLException e) {
System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 연결 정보 오류");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 클래스 파일 오류");
e.printStackTrace();
}catch (Exception e) {
System.out.println("별도의 사유로 연결 실패");
e.printStackTrace();
}
// 만약 연결이 안되게되었다면 열려있는 con객체를 닫아야한다.
try {
if(con!= null)con.close();
if(pstmt!= null)pstmt.close(); //각각의 객체도 닫아줘야함
if(rs!= null)rs.close();// 각가의 객체도 닫아줘야함.
System.out.println("데이터베이스가 잘 종료되었다.");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
cs |
<insert 구현>
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
61
62
63
64
65
66
|
package JDBC01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBC_Insert {
public static void main(String[] args) {
Connection con = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
System.out.println("연결성공");
Scanner sc =new Scanner(System.in);
System.out.printf("저장할 번호를 입력하세요: ");
String num = sc.nextLine();
System.out.printf("이메일을 입력하세요: ");
String name = sc.nextLine();
System.out.printf("이름을 입력하세요: ");
String email = sc.nextLine();
System.out.printf("전화번호를 입력하세요: ");
String tel = sc.nextLine();
//그러난 이는 옛날 구식의 방법으로 값을 입력받아 넣는방법이다.
// String sql = "insert into cost values("+num +"," + name +"," + email +"," + ","+tel+")" ;
//아래가 요즘방식
String sql = "insert into cost values(?,?,?,?)"; //? 는prepareStatement 가 알아봐요
pstmt =con.prepareStatement(sql);
pstmt.setInt(1,Integer.parseInt(num)); // 테이블의 데이터타입에 뭦춰주는것 잊지마.
pstmt.setString(2,name);
pstmt.setString(3,email);
pstmt.setString(4,tel);
int result = pstmt.executeUpdate();
if(result ==1) System.out.println("inset 저장 성공!");
else System.out.println("저장 실패");
} catch (SQLException e) {
System.out.println("DB 연결 실패 무언가 잘못됬다.. 드라이버 연결 정보 오류");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("DB 연결 실패 무언가 잘못됬다.. 드라이버 클래스 파일 오류");
e.printStackTrace();
}catch (Exception e) {
System.out.println("별도의 사유로 연결 실패");
e.printStackTrace();
}try {//con!= null 열린다.
if(con!= null)con.close();
if(pstmt!= null)pstmt.close();
System.out.println("데이터베이스가 잘 종료되었다.");
} catch (SQLException e) {
}
}
}
|
cs |
<update 구현>
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
61
62
63
64
65
66
67
68
69
|
package JDBC01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBC_Update {
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
Connection con = null;
PreparedStatement pstmt = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url, "scott", "tiger");
// System.out.println("데이터베이스 연결 성공~~~");
Scanner sc = new Scanner(System.in);
System.out.print("수정할 회원의 번호를 선택하세요: ");
String num = sc.nextLine();
System.out.print("수정할 항목을 선택하세요. 1.이메일 2.전화번호");
String input = sc.nextLine();
String sql = null;
switch (input) {
case "1":
System.out.print("수정할 이메일을 입력하세요: ");
String email = sc.nextLine();
sql = "update cost set email=? where num=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, email);
pstmt.setInt(2, Integer.parseInt(num));
break;
case "2":
System.out.print("수정할 전화번호을 입력하세요: ");
String tel = sc.nextLine();
sql = "update cost set tel=? where num=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, tel);
pstmt.setInt(2, Integer.parseInt(num));
break;
}
int result = pstmt.executeUpdate();
if (result == 1)
System.out.println("수정 성공 ~");
else
System.out.println("수정 실패 ㅠ");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
|
cs |
<delete 구현>
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
|
package JDBC01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class JDBC_Delete {
public static void main(String[] args) {
Connection con = null;
PreparedStatement pstmt = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","scott","tiger");
System.out.println("연결성공");
Scanner sc = new Scanner(System.in);
System.out.println("삭제할 번호 를입력하세요");
int num =sc.nextInt();
String sql = "delete from customer where num=?";
pstmt= con.prepareStatement(sql);
pstmt.setInt(1, num);
pstmt.executeUpdate();
}catch (SQLException e) {
System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 연결 정보 오류");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("DB연결 실패 무언가 틀렸다.. 드라이버 클래스 파일 오류");
e.printStackTrace();
}catch (Exception e) {
System.out.println("별도의 사유로 연결 실패");
e.printStackTrace();
}
try {
if(pstmt!= null)pstmt.close();
if(con!= null)con.close();
System.out.println("데이터베이스가 잘 종료되었다.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
|
cs |
'Java 공부 > JDBC' 카테고리의 다른 글
[JDBC] JDBC 프로그래밍 익숙하게 하기 (0) | 2020.10.16 |
---|