오늘의 코딩
ch15_ex01>>>
- OraDr01
- String driver = "oracle.jdbc.driver.OracleDriver";
- String url = jdbc:oracle:thin:@127.0.0.1:1521:xe >>
- 127.0.0.1 은 Localhost(이 숫자 자리에 @localhost가 들어가도 됨), 1521은 port번호, 다른 곳은 이 번호가 다를 수 있다
- C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN
- getConnection:
- DriverManager:
package ch15_ex01;
import java.sql.Connection;
import java.sql.DriverManager;
public class OraDr01 {
public static void main(String[] args) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
//jdbc:oracle:thin:: 예약어 reserved word
//127.0.0.1: DB가 설치될 ip주소
// + 오라클의 localhost
System.out.println("Start1");
try {
Class.forName(driver);
// Oracle Driver 메모리에 올리는 것
System.out.println("start2");
Connection conn = DriverManager.getConnection(url, "scott","tiger");
System.out.println("start3");
if (conn != null) {
System.out.println("Success 연결 성공");
} else {
System.out.println("Fail");
}
conn.close();
} catch (Exception e) {
//System.out.println(e.getMessage());
System.out.println("Error");
}
}
}
- SQL>>> scott_0611
- 왼쪽 워크시트 빈칸에 우클릭>>행번호토글 누르면 번호가 뜸
- 예약어(reserved): INSERT, UPDATE, SET, SELECT등
- table space에는 진짜 DB를 넣을 때 쓴다
- row: 행, column 열
- commit
- Rollback은 현재 내린 명령을 원상복귀하는 명령어, 다만 commit을 하고 나면 ㄲollback이 먹히지 않음
- 초록색 재생버튼는 한 개의 row(한 행)만 실행, 그 오른쪽의 버튼은 전체 실행
- *: 모든 컬럼아 다 나와라
-- CRUD
INSERT INTO DEPT
VALUES('50','영업1팀','이대');
UPDATE DEPT
SET dname = '', LOC = '홍대'
WHERE DEPTNO = 50
;
SELECT *
FROM DEPT
;
DELETE DEPT
WHERE DEPTNO = 52
;
Select dname, loc From Dept Where deptno=51;
commit;
Select * From emp
;
- SQL>>> EMP_INFO2
- p_:파라미터(매개변수
- --IN 값은 건드리지 않을 때 사용
- --out:내가 호출한 환경으로 값 돌려줌 --OUT 값은 나중에 변경하고 싶을 때 사용
- emono는 상수도 변수도 아니지만 상수라고 생각해두면 조금 편하다, 다만 다른데서 이렇게 말하지는 말것ㅎㅎ
- dbms_output.put_line: -- sysout. 과 같은 뜻
- || v_empno || CHR(10) || CHR(13)|| '줄바뀜');
- ||: 중위연산자, java의 +와 같은 뜻
- 10,13: 아스키코드
create or replace PROCEDURE EMP_Info2
( p_empno IN emp.empno%TYPE, --p_:파라미터(매개변수) --IN 값은 건드리지 않을 때 사용
p_ename OUT emp.ename%TYPE, --out:내가 호출한 환경으로 값 돌려줌 --OUT 값은 나중에 변경하고 싶을 때 사용
p_sal OUT emp.sal%TYPE
)
IS
-- %TYPE 데이터형 변수 선언
v_empno emp.empno%TYPE;
BEGIN
DBMS_OUTPUT.ENABLE;
-- %TYPE 데이터형 변수사용
SELECT empno, ename, sal
INTO v_empno, p_ename, p_sal --위에 선언한 v_empno 변수 가져오기
FROM emp
WHERE empno = p_empno ;
--결과값 출력
dbms_output.put_line( '사원번호 : ' || v_empno || CHR(10) || CHR(13)|| '줄바뀜');
-- sysout. 과 같은 뜻 -- ||: 중위연산자, java의 +와 같은 뜻 --10,13: 아스키코드
DBMS_OUTPUT.PUT_LINE( '사원이름 : ' || p_ename ) ;
DBMS_OUTPUT.PUT_LINE( '사원급여 : ' || p_sal );
END;
- OraInsert
- 여기서 String은 가독성을 올리기 위해 자주 사용됨
- Statement와 PreparedStatement, CallableStatement 모두 SQL 쿼리를 실행시킨다는 공통점이 있으나, Statement는 sql을 할당하는 시점에서 고정된 데이터를 갖는 쿼리문을 실행한다
반면, PreparedStatement의 경우, 임의의 데이터를 ? 표로 대체하고, set~(Int, String 등)의 메소드를 통해
임의의 데이터를 주입하여 실행할 수 있다. - Statement 에서도 임의의 데이터를 주입하여 실행하기 위해 Java의 + 연산자를 이용할 수도 있으나,
해당 방식은 데이터 값으로 쿼리에 영향을 줄 수 있는 값이 주입될 경우 오류를 일으킬 수 있다. - SQLException
package ch15_ex01;
import java.sql.Connection;
import java.sql.DriverManager;
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();
String driver = "oracle.jdbc.driver.OracleDriver";
//Localhost -> 127.0.0.1; , Port 번호: 1521 , xe(orcl)-> Service ID(Sid)
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
//혹은 String url = "jdbc:oracle:thin:@localhost:1521:xe";
// ex) INSERT INTO DEPT VALUES(50, '영업1팀', '이대')
String sql = String.format("Insert Into dept values(%s, '%s', '%s')", deptno, dname, loc);
System.out.println("sql->"+sql);
Connection conn = null;
Statement stmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott", "tiger");
stmt = conn.createStatement();
//result Set
int result = stmt.executeUpdate(sql); //executeUpdate: 수행-> execcuteQuery
//insert 된 카운터 개수를 돌려줌
if(result > 0) System.out.println("입력성공 ^^");
//1이 아님, 0보다 크다 입력 필수
else System.out.println("입력실패 T.T");
} catch(Exception e) {
System.out.println(e.getMessage());
}finally {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
sc.close();
}
}
- OraSelect01
- String sql = "Select dname, loc From Dept Where deptno=" +deptno; >> dname과 loc자리를 이용해 교체 가능
- 유일성(=유니크)를 보장하기 때문에 한 줄만 나온다
- String loc = rs.getString("loc"); // String loc = rs.getString(2); >> 괄호 안에는 column명을 넣어도 되고 column의 순서를 아라비아 숫자로 넣어도 된다
- String sql = "Select dname, loc From Dept Where deptno=" +deptno; >> dname과 loc자리를 이용해 교체 가능
package ch15_ex01;
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 OraSelect01 {
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";
// Localhost -> 127.0.0.1; , Port 번호:1521 , xe(orcl)-> Service ID(Sid)
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "Select dname, loc From Dept Where deptno=" +deptno;
Connection conn = null; //DB
Statement stmt = null; //Sql
ResultSet rs = null; //Select
//select로 쓸 때 그 값을 result에 저장해 두어라
System.out.println("sql->" + sql);
try {
Class.forName(driver); //Driver
conn = DriverManager.getConnection(url, "scott","tiger");
stmt = conn.createStatement(); //stmt
rs = stmt.executeQuery(sql); //SQL Select
//select를 입력했을 경우 result를 반드시 써야함
//rs Row
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); //column명을 넣어도 되고 순서를 넣어도 됨
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();
}
}
- OraSelect02
- 선언을 파악하기 위해 + multi row이기 때문에 do-while문을 사용, row가 한 줄이어도 함께 쓰는 row는 multi가 될 가능성을 배제해서는 안되기 때문에 do-while문 사용
package ch15_ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
public class OraSelect02 {
public static void main(String[] args) throws SQLException {
String driver = "oracle.jdbc.driver.OracleDriver";
// Localhost -> 127.0.0.1; , Port 번호:1521 , xe(orcl)-> Service ID(Sid)
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "Select * From emp";
Connection conn = null; //DB연결
Statement stmt = null;; //Sql문장
ResultSet rs = null; //Rdsult Set
System.out.println("사원명단");
System.out.println("사원코드\t 사원명\t 업무\t\t 급여\t 일자");
System.out.println("==========================================");
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott","tiger");
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
do {
int empno = rs.getInt(1);
String ename = rs.getNString(2);
String job = rs.getString(3);
int sal = rs.getInt("sal");
Date date = rs.getDate("hiredate");
if (job.length() > 7) System.out.printf("%d\t%s\t%s\t%d\t%TF\n", empno, ename, job, sal, date);
else System.out.printf("%d\t%s\t%s\t\t%d\t%TF\n",empno, ename, job, sal, date);
}while (rs.next()); //multi row이기 떄문에 do-while문 사용 //row단위(한 줄)로 이동, 향상형 for문과 비슷함
}
else {
System.out.println("data No");
}
}catch(Exception e) {
System.out.println(e.getMessage());
}finally {
if (rs != null) rs.close();
if (stmt!= null) stmt.close();
if (conn!= null) conn.close();
}
}
}
- OraPrepare
- PreparedStatement, CallableStatement의 키워드: Secure Coding(보안) & 가독성
- PreparedStatement: 문장을 준비해 놓을 때 씀, 가독성이 뛰어남, 긴 코드를 정리할 때 좋음, 보안유지가 우수함
package ch15_ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class OraPrepare {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("입력할 Oracle 부서코드 ?"); String deptno = sc.nextLine();
System.out.println("입력할 Oracle 부서명 ?"); String dname = sc.nextLine();
System.out.println("입력할 Oracle 근무지 ?"); String loc = sc.nextLine();
Connection conn = null;
PreparedStatement pstmt = null;
//PreparedStatement: 문장을 준비해 놓을 때 씀
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "Insert Into dept values(?, ?, ?)";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott","tiger"); //sql추가
pstmt = conn.prepareStatement(sql);
//PreparedStatement:가독성이 뛰어남, 긴 코드를 정리할 때 좋음, 보안유지가 우수함
pstmt.setString(1, deptno);
pstmt.setString(2, dname);
pstmt.setString(3, loc);
//물음표가 세 개니까 코드도 세 줄
//result는 작업에 성공한 갯수
int result = pstmt.executeUpdate();
if(result > 0) System.out.println("OraPrepare 입력성공 ^^");
else System.out.println("OraPrepare 입력실패 T.T");
} catch(Exception e) {
System.out.println(e.getMessage());
} finally {
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
}
sc.close();
}
}
- OraProc01
- CallableStatement: Procedure 호출시 사용하는 인터페이스
- CallableStatement의 경우, SQL 데이터베이스 내의 프로시저 객체를 실행시킬 때 사용하는 것으로, 기본적으로 그 쿼리문은 {CALL 프로시저_이름} 형태로 되어있다.
그러나 out 매개변수가 있을 경우 {? = CALL 프로시저_이름} 의 형태로 쿼리문을 작성하는데, 이 out 매개변수는 registerOutParameter(물음표 순서, 데이터베이스의 데이터 타입); 메소드를 통해 Java에서 그 값을 이용할 수 있다.
package ch15_ex01;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Scanner;
public class OraProc01 {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("입력할 Oracle 부서코드 ?"); String deptno = sc.nextLine();
System.out.println("입력할 Oracle 부서명 ?"); String dname = sc.nextLine();
System.out.println("입력할 Oracle 근무지 ?"); String loc = sc.nextLine();
Connection conn = null;
CallableStatement cs = null;
//CallableStatement: Procedure 호출시 사용하는 인터페이스
String driver = "oracle.jdbc.driver.OracleDriver";
// Localhost -> 123.0.0.1; , Port 번호:1521, xe(orcl) -> Service Id(Sid)
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "{call dept_Insert(?, ?, ?)";
//call이 Procedure을 호출
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "scott","tiger");
cs = conn.prepareCall(sql);
//preparecall로 CallableStatement를 호출
cs.setString(1, deptno);
cs.setString(2, dname);
cs.setString(3, loc);
int result = cs.executeUpdate();
if ( result > 0) System.out.println("Oracle CallableStatement 입력성공 ^^");
else System.out.println("Oracle CallableStatement 입력실패 T.T");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if( cs != null ) cs.close();
if( conn != null ) conn.close();
}
sc.close();
}
}
- SQL>>>프로시저>>DEPT_INSERT
create or replace Procedure Dept_Insert
(
p_deptno in dept.deptno%type, --변수를 전환해도 재컴파일 할 필요가 없음
p_dname in dept.dname% type,
p_loc in dept.loc%Type
)
Is
begin
Insert into dept values(p_deptno , p_dname, p_loc);
commit; --진짜로 값을 넣을지 말지는 commit를 만난 후 결정됨
End;
- OraProc02
- 안에 넣을 것은 in선언, 밖으로 던질 것은 out선언
package ch15_ex01;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Scanner;
public class OraProc02 {
public static void main(String[] args) throws SQLException {
Scanner sc = new Scanner(System.in);
System.out.println("정보가 궁금한 사람 사번");
int empno = sc.nextInt();
String driver = "oracle.jdbc.driver.OracleDriver";;
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "{call emp_Info2(?, ?, ?)";
Connection conn = null;
CallableStatement cs = null;
try {
Class.forName(driver);
conn= DriverManager.getConnection(url,"Scott","tiger");
cs = conn.prepareCall(sql);
cs.setInt(1, empno);
cs.registerOutParameter(2, java.sql.Types.VARCHAR);
cs.registerOutParameter(3, java.sql.Types.INTEGER);
cs.executeQuery();
String ename = cs.getString(2);
int sal = cs.getInt(3);
System.out.println("사번 :" + empno);
System.out.println("이름 :" + ename);
System.out.println("급여: " + sal);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (cs != null) cs.close();
if (conn!= null) conn.close();
}
}
}
수업교재 18] JDBC⭐⭐⭐⭐⭐(프로젝트 필수템)
1. 데이터베이스란?
- 연관된 데이터들의 묶음을 데이터베이스라고 함
- 데이터베이스에서는 정보를 저장하기 위해서 테이블을 사용함
- 테이블은 표처럼 볼 수 있도록 Row(행,가로줄), column(열,세로줄)으로 구성됨
2. JDBC 프로그래밍
1. JDBC(Java Database Connectivity)
- 자바 기반 애플리케이션의 코드 레벨에서 사용하는 데이터를 데이터베이스에 저장 및 업데이트하거나, 반대로 데이터베이스에 저장된 데이터를 자바 코드 레벨에서 사용할 수 있도록 해주는 자바에서 제공하는 표준 사양
- 자바 프로그램이 데이터베이스와 연결되어 데이터를 주고받을 수 있게 해주는 프로그래밍 인터페이스
- 자바 데이터베이스 프로그래밍 API라고도 할 수 있음
- 동작흐름: JAVA 애플리케이션 => JDBC API => JDBC 드라이버 => 데이터베이스
Java 애플리케이션에서 JDBC API를 이용해 적절한 데이터베이스 드라이버를 로딩한 후, 데이터베이스와 상호작용시킴
2. JDBC 드라이버
- MySql 또는 Oracle 드라이버를 자바가 설치되어 있는 폴더에 복사해서 사용
- 종류: OJDBC6.JAR, mysql-connector-j-8.0.33.jar
3 .⭐⭐⭐⭐⭐JDBC 프로그래밍 단계 및 Class(이 부분이 JDBC 통틀어서 제일 중요함)
아래의 과정은 Logic이 아닌 고정된 절차!
Class.forName(driver);
Connection conn = DriverManager.getConnection(url,"scott","tiger");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);\
rs.close();
stmt.close();
conn.close();
- JDBC 드라이버 로드
- System.setProperty⭐⭐⭐
- setProperty() 메서드를 호출해서 JDBC 드라이버의 시스템 속성을 설정하여 드라이버를 로딩함
- Class.forName⭐⭐⭐
- 인터페이스 드라이버를 구현하는 작업
- forName을 이용해서 드라이버를 로딩하면 객체가 생성되고, DriverManager에 등록됨
- Driver 클래스를 찾지 봇할 경우, ClassNotFoundException 예외가 발생하니 반드시 예외처리를 해야함
- 사용방법: Calss.forName("com.mysql.jdbc.Driver")
- System.setProperty⭐⭐⭐
- 데이터베이스 연결(Connection 객체 생성)
- Connection
- 데이터베이스를 연결해 작업을 수행할 수 있도록 만들어주는 중요한 객체, 어떤 SQL 문장을 실행시키기 전에 우선 Connection 객체가 있어야함
- 특정 데이터 원본과 연결된 커넥션을 나타내며, 특정한 SQL 문장을 정의하고 실행시킬 수 있는 Statement 객체를 생성할 때 사용함
- DriverManager 클래스의 static 메서드인 getConnection()을 호출해야함
- 사용방법: Connection con = DriverManager.getConnection(url, uid, pwd); 으로 Connection 객체를 생성함
- url: 관계형 데이터베이스 엔진에서의 위치
- uid:사용자 계정(ex. scott)
- pwd: 사용자 패스워드(ex.tiger)
- DriverManager
- 데이터 원본에 JDBC 드라이버를 통해 Connection을 만드는 역할을 함
- Class.forName()메서드를 통해서 생성됨
- DriverManager 클래스의 모든 메서드는 static이기 때문에 반드시 객체를 생성시킬 필요가 없음
- DriverManager 클래스는 Connection 인터페이스의 구현 객체를 생성하는데 getConnection() 메서드를 사용함
- Connection
- Statement 생성
- Statement
- Statement 인터페이스는 Connection 객체를 통해 프로그램에 리턴되는 객체에 의해 구현되는 일종의 메서드 집합을 정의함
- Statement 객체는 Statement 인터페이스를 구현한 객체로, 항상 인수가 없는 Connection 클래스의 CreateStatement() 메서드를 호출함으로서 얻어짐
- 단순한 질의문을 사용할 경우에 좋음
Statement 객체를 생성하면 Statement 객체의 exequteQuery() 메서드를 호출하여 SQL 질의를 실행시킬 수 있기 때문 - 사용방법: Statement stmt = con.createStatement();
- Statement 객체로 쿼리문 수행하는 법
- select문과 같이 결과가 있는 쿼리문인 경우: executeQuery() 메서드 사용
- insert, update, delete문과 같이 내부적으로는 어떤 변화가 있지만 결과가 없는 경우: executeUpdate()메서드 사용
- 사용방법: ⭐⭐String str="select*fron employee"; ResultSet rs = stmt.executeQuery(str);
- ↳ Query?
- 웹 서버에 특정한 정보를 보여달라는 웹 클라이언트 요청(주로 문자열을 기반으로 한 요청)에 의한 처리
- 대개 데이터베이스로부터 특정한 주제어나 어귀를 찾기 위해 사용됨
- 주제어가 검색엔진의 검색필드 내에 입력된 다음, 그 내용이 웹 서버로 넘겨짐
- PreparedStatement
- 쿼리를 미리 생성하여 쿼리에 들어갈 변수를 설정해준뒤 쿼리를 실행한다는 점에서 Statement 객체와 다르며, Statement보다 좀 더효율적임
- 재사용률이 높고, 반복되는 작업에서 처리속도가 빠르며, 객체를 여러 개 생성할 필요가 없음
- 어떨 때 사용하면 유용한가?
- 동일한 질의문을 특정 값만 바꾸어서 여러번 실행해야할 때
- 많은 데이터를 다루기 때문에 질의문을 정리해야 할 필요가 있을 때
- 인수가 많아서 질의문을 정리해야 할 필요가 있을 때
- PraparedStatement 객체를 생성하기 위해서는 Connection 인터페이스의 PreparedStatement() 메서드를 호출함
- 이 메서드의 인자로 사용되는 SQL 문은 ? 기호를 사용해서 표현할 수 있음
이 기호는 Token이라고 하는데, SQL 문장이 실행되기 전에 실제 값으로 대체됨
이 방법을 이용하면 특정 값으로 문자열을 연결하느 ㄴ방법보다 훨씬 쉽게 SQL 문장을 만들 수 있음
ex) String sql = "insert into employee values(?,?,?,?,?)"; ==> 각 ?로 지정된 인자에 값을 줌 - 사용방법: PreparedStatement pstmt = con.PreparedStatement(sql);
- Statement
- SQL문 전송 (Query 실행)
- Statement
- excute()
- Boolean 값을 반환하며, 모든 구문에 대해 수행할 수 있음
- 리턴값이 ResultSet일 경우에는 true, 그렇지 않다면 false로 출력됨
- executeQuery()⭐⭐⭐
- select나 show처럼 주로 조회문에 사용됨
- 저장된 값을 레코드 단위(한 행)로 불러올 수 있으며, ResultSet 객체를 반환함
이때, get.자료타입() 메서드로 불러온 해으이 칼럼값에 접근할 수 있음 - 사용방법:
Result rs = pstmt.excuteQuery();
rs.getInt(1)
rs.getString(2)
- executeUpdate()
- insert문, update문, delete문, create문과 같이 데이터베이스 파일의 내용을 변경하는 SQL문을 실행할 때 사용함
- int 타입을 반환함( 반영된 레코드 수를 반환하는 것)
- executeUpdate() 메서드는 변경된 행(레코드)의 수를 반환해 주기 때문에 리턴형이 Integer임
- 키보드에서 읽어온 변수에 저장된 값으로 행을 추가할때, 문자열 상수의 경우 반드시 단일 따옴표로 둘러싸야 하기 때문에 복잡한 형태의 문장을 만들어야함
- 결과 받기 (ResultSet 객체로부터 데이터 조회)
- ResultSet⭐⭐⭐
- 결과 값으로 얻어진 여러 개의 row를 출력하기 위해서 사용함
- SQL 문에서 SELECT 문을 사용한 질의의 경우 성공 시 결과물로 ResultSet을 반환함
- 레코드 단위로 이동하는 next() 메서드를 사용하며, 일반적으로 while 문과 함께 사용함
- 종류: rs.getInt(인덱스숫자 or "데이터이름") , rs.getString(인덱스숫자 or "데이터이름" );
- ResultSet⭐⭐⭐
- 연결 해제(ResultSet 객체, Statement 객체, Connection 객체 Close)
- Connection
- Close()
- 모든 작업이 끝나면 Statement 객체에서 close()메서드를 호출해서 데이터베이스와의 연결을 해제해야 함
- 사용방법: stmt.close();
오늘의 과제
- OraUpdate
package ch15_ex01;
//HW01
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class OraUpdate {
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();
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
Connection conn = DriverManager.getConnection(url, "scott","tiger");
Statement stmt = conn.createStatement();
}
}
//결과값
수정할 부서를 입력하세요 ?
51
부서명 ?
경영3팀
근무지?
삼성
수정성공 ^^
>>>결과물
package ch15_ex01;
//HW01
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class OraUpdate {
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();
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = String.format("Update dept Set dname = '%s', loc = '%s' Where deptno = %s", dname, loc, deptno);
//format을 사용하여 깔끔하게 정리
Connection conn = DriverManager.getConnection(url, "scott","tiger");
Statement stmt = conn.createStatement();
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();
}
}
- OraDelete
- 전체를 날릴 떄 사용, 하나만 날리는 것은 불가능 하므로 그럴 때는 Update 사용하기
package ch15_ex01;
import java.sql.Connection;
import java.sql.Statement;
//HW02
import java.util.Scanner;
public class OraDelete {
public static void main(String[] args) {
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";
// Localhost -> 127.0.0.1; , Port 번호:1521 , xe(orcl)-> Service ID(Sid)
}
}
//결과값
삭제할 부서를 입력하세요 ?
53
삭제 성공 ^^
>>결과물
package ch15_ex01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
//HW02
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";
// Localhost -> 127.0.0.1; , Port 번호:1521 , xe(orcl)-> Service ID(Sid)
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
String sql = "delete dept where deptno=" +deptno;
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("삭제 실패T.T");
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
sc.close();
}
}
'DB > Oracle' 카테고리의 다른 글
2024_06_27_목 (0) | 2024.06.27 |
---|---|
2024_06_26_수 (0) | 2024.06.26 |
2024_06_26_수 (0) | 2024.06.26 |
2024_06_25_화 (0) | 2024.06.25 |
2024_06_12_수 (0) | 2024.06.12 |