일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- localhost
- 깃 토큰
- 단축키
- database
- clone
- OrCAD 다운로드
- cmd
- 따옴표 삭제
- Python
- import data
- 클론
- Visual Studio Code
- github token
- 파이썬
- PHPStorm
- 오류
- run sql script
- php
- csv
- github clone
- console창
- DataGrip
- error 해결
- 데이터베이스
- MySQL
- visualstudio code
- vscode
- 에러
- jupyter
- error
- Today
- Total
개발 노트
8/3 JDBC, 데이터베이스, 스키마, DB연결, JDBC 프로그래밍 단계 및 Class 본문
8/3 JDBC, 데이터베이스, 스키마, DB연결, JDBC 프로그래밍 단계 및 Class
hayoung.dev 2022. 8. 4. 09:19[19. JDBC]
1. 데이터베이스 개요
연관된 데이터들의 묶음을 데이터베이스라고 한다.
- 데이터베이스에서는 정보를 저장하기 위해서 테이블을 사용
- 테이블은 표처럼 볼 수 있도록 로우(ROW)와 칼럼(COLUMN)으로 구성
2. 데이터베이스 Table의 구성 및 Script
이것이 스키마이다. 데이터구조임.
CREATE TABLE DEPT
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14 BYTE),
"LOC" VARCHAR2(13 BYTE),
PRIMARY KEY ("DEPTNO")
)
3. DB 연결하기
1) 위의 파일을 복사해서
C:\Program Files\jdk-11.0.12\bin
경로에 붙여넣기
2) OraDr.java
package ch18;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class OraDr {
public static void main(String[] args) throws SQLException {
String driver = "oracle.jdbc.driver.OracleDriver";
//127.0.0.1은 IP번호, 1521은 PORT번호, xe는 SID(Service ID)
//127.0.0.1 주소는 나 자신임.
//C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN\tnsnames.ora
//에 (SERVICE_NAME = XE) 라고 적혀있다. 데이터베이스를 구별하는 아이디. 원하는 곳에 접속할 때 사용
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
//driver가 없을 수 있으므로 예외처리
try {
Class.forName(driver);
//접속하려는 DB주소, 아이디, 비번
Connection conn = DriverManager.getConnection(url, "scott", "tiger");
System.out.println("Start");
//DB 접근 성공 여부 확인함.
if(conn != null) {
System.out.println("Success 연결 성공");
} else {
System.out.println("Fail");
}
conn.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
*oracle에서 scott 우클릭 > 속성 > 세부정보에 적혀있는 호스트이름, 포트번호, SID가 같은것을 볼 수 있음.
*포트번호 개념
unix는 물리서버이다. unix 안에 g/w, m/w, web/DB 등이 있음. 이들은 논리서버이다.
이 논리서버를 가리킬 때 포트번호를 사용함. 즉 구체적인 주소임.
3) ch18 우클릭 > build path > configure build path> libraries > classpath > add External JARs > ojdbc6.jar 파일 선택하여 연결 (버전이 올라가도 똑같이 이렇게 해 주기)
연결 결과
4. JDBC 프로그래밍 단계 및 Class
차례로 사용클래스를 써가며 단계를 수행한다.
- SQL문 전송에서 select는 executeQuery()를 사용해야 하고, insert, delete, update는 executeUpdate()를 사용해야 한다.
select일 경우 결과받기를 ResultSet을 통해 해줘야 한다. (insert, delete, update는 ResultSet이 필요없다.)
- (면접에서 물어볼 수 있음)
java.sql.Statement 문은 보안에 취약함. secure코딩을 하려면 java.sql.preparedStatement 문을 써야 함. 이 객체를 쓰려면 sql 작성 시 ?을 사용함. 또한 오히려 이것이 가독성있음.
1) java.sql.Statement : execute에 sql문장을 줌.
2) java.sql.preparedStatement : prepared에 sql문장을 줌
3) CallableStatement : preparedStatement와 비슷한 구조를 가지며 그래서 이것도 보안이 좋음. (사실은 CallableStatement가 preparedStatement의 자식임.)
5.OraSelect1.java
package ch18;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class OraSelect1 {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("부서 코드를 입력하세요");
int deptno = sc.nextInt();
// 서버정보. 아까 연결 성공 했으므로 복붙으로 쓰기.
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "Select dname, loc From Dept Where deptno=" + deptno;
// 자동완성은 sql로 해야 함.
Connection conn = null; // DB 연결
Statement stmt = null; // sql 처리 기본 객체
ResultSet rs = null; // select를 하면 꼭 result를 가져와야 함.
try {
//드라이버 클래스 로딩
Class.forName(driver);
//Connection 객체 생성
conn = DriverManager.getConnection(url, "scott", "tiger");
stmt = conn.createStatement(); // stmt
rs = stmt.executeQuery(sql);
// rs.next : 값이 있는지 확인
if (rs.next()) {
String dname = rs.getString("dname"); // rs.getString(1) <-- dname
String loc = rs.getString("loc"); // rs.getString(2) <-- loc
//String loc = rs.getString(2); //바로 윗 줄 이렇게도 쓸 수 있음.
System.out.println("부서번호 : " + deptno);
System.out.println("부서명 : " + dname);
System.out.println("위치 : " + loc);
} else {
System.out.println("자료가 없습니다");
}
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
sc.close();
}
}
출력 결과
6. OraInsert.java
package ch18;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class OraInsert {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("부서번호 입력?"); String deptno = sc.nextLine();
System.out.println("부서명 입력?"); String dname = sc.nextLine();
System.out.println("위치 입력?"); String loc = sc.nextLine();
Connection conn = null;
Statement stmt = null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
//String sql = "Insert INTO dept VALUES (" + deptno+ ",'"+ dname + "', '" + loc + "') ";
String sql = String.format("Insert INTO dept VALUES (%s, '%s', '%s')", deptno, dname, loc);
System.out.println("sql->"+sql);
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott", "tiger");
stmt = conn.createStatement(); // stmt
//insert delete update는 resultset을 쓰지 않음.
int result = stmt.executeUpdate(sql);
if (result > 0)
System.out.println("입력성공");
else
System.out.println("입력실패");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
sc.close();
}
}
출력 결과
OraDelete.java (과제 : pk(deptno)를 입력하여 지우기)
package ch18;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class OraDelete {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("삭제할 부서번호를 입력하세요");
String deptno = sc.nextLine();
Connection conn = null;
Statement stmt = null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = String.format("DELETE dept WHERE deptno = %s", deptno);
System.out.println("sql->" + sql);
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott", "tiger");
stmt = conn.createStatement();
int result = stmt.executeUpdate(sql);
if (result > 0)
System.out.println("삭제성공");
else
System.out.println("삭제실패");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
}
sc.close();
}
}
출력 결과
원래 테이블
삭제 후 테이블
'프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20 > JDBC' 카테고리의 다른 글
9/16 파일 업로드 폼, 필터, ready 메서드 (0) | 2022.09.20 |
---|---|
9/15 html cookie, git 사용법 (0) | 2022.09.19 |
9/14 데이터베이스 커넥션 풀(Database Connection pool), 모듈화, exERD 설치 및 사용, 순공학, 역공학 (0) | 2022.09.19 |
9/13 html 페이지 이동, request.setAttribute, MVC2모델 (0) | 2022.09.19 |
8/4 JDBC(Select, Insert, Update, procedure, function) (0) | 2022.08.04 |