C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN

db에 연결 설정..

tnsnames.ora 파일 열기
ORCL81 =   // 호스트명
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 61.98.47.81)(PORT = 1521))
    (CONNECT_DATA =         ----------- 내가 접속할 pc ip 
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

telnet 으로 확인 ex) telnet 61.98.47.83 1521

sqlplus로 들어갈때 
---------------------
id  | scott
passwd  | tiger
호스트  | orcl81

모든 app의 시간은 db의 시간을 기준으로 삼는다.

db   : 문자열    |
java : 시간      |(date) SimpleDateFormat으로 데이타 변경
모든 화면의 시간은 database 시간으로 봐야 한다.

트랜잭션  :두개의 행위가 묶여서 하나의 행위를 하는것
ex)
  스위스      작업
한국     북한   한국--> 북한 송금
      |----- 한국  -> 스위스 
    두개의일--------|
한국에서 북한으로 돈을 송금   |----- 스위스  ->  북한
송금할때 스위스를 거쳐서 송금 .

두개의 일이 묶여서 하나의 송금이라는 작업을 한다.

setAutoCommit 트랜잭션 처리

addBatch connect 한번으로 데이터를 모두 처리한다.

try{
   con = getConnection();
   // 트랜잭션 시작 .
   con.setAutoCommit(false); // autocommit할수 없게 false로 설정
      
   stmt = con.createStatement();
   for(int i =0 ; i<arr.length; i++){
    stmt.addBatch(arr[i]); // 일괄 처리를 위해 stmt에 하나씩 데이터 삽입.
   }
   int[] resultArr = stmt.executeBatch(); // 일괄처리.
   for(int i =0; i<resultArr.length; i ++){
    if(resultArr[i]<1){ // 예외처리한다.
     throw new Exception("ERROR");
    }
   }
   
   
   con.commit(); // 성공 했을때 .. commit
   con.setAutoCommit(true); // 다시 원상 복귀 한다.
   
   
   
  }catch(Exception e){
   e.printStackTrace();
   try{
    con.rollback();
   }catch(Exception le){}
  }finally{
   close(null,stmt,con);
  }

 

addBatch ----
      | 
executeBatch ----

 

 

 

 

 

 

 

 

 

 

 


 

커서 이동.

rownum : 1부터 조회는 가능 1이외의 숫자는 조회 불가능.

커서를 이동하기 위해서는 Statement stmt;
stmt에 옵션을 주어야 한다.
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
     ---------------------------------   ----------------------------
      커서가 스크롤링이 가능   결과값으로 업데이트 가능         

rs.absolute(310); // 커서는 absolute() 안에 int값으로 커서를 이동
rs.last();    // 마지막으로 커서 이동.
rs.next();    //커서는 하나씩 이동.

update..

 rs = stmt.executeQuery();  //  셀렉트를 실행해 쿼리 를 가져온다.
 boolean existFlag = rs.next(); // 쿼리가 있으면 true를 리턴
 if(existFlag == true){
  rs.updateString(2, "서울시 구로구"); // 업데이트할 값
  rs.updateString(3, "98765-45613");  
  rs.updateRow(); // 행을 업데이트 해라 .. 필히 ..
 }


insert..

 else{
  System.out.println("insert 작업이 실행됩니다. ");
  rs.moveToInsertRow(); // insert할 행으로 이동.
  rs.updateString(1,"임꺽정");  //컬럼 값
  rs.updateString(2,"산이름 기억안난다. 그냥 .. 야산. ");
  rs.updateString(3,"다이 ");
  rs.insertRow();  // insert할 로우를 삽입.
 }

index

primary키 설정하면 자동으로 인덱스를 만든다.

index를 만들면 index table이 만들어진다.

SELECT * FROM TBL_TEST1 WHERE addr = '국내성1000'

CREATE INDEX idx_test1 ON TBL_TEST1 (addr)
/*만들기        인덱스 이름  on 테이블 이름   컬럼명 */
// 컬럼명은 여러개 가능하다.
CREATE INDEX idx_test1 ON TBL_TEST1 (addr desc, NAME desc )

 

DROP INDEX idx_test1

CREATE VIEW v_test1 AS SELECT addr, NAME FROM TBL_TEST1
// 만드는 방법 두가지
CREATE OR REPLACE VIEW v_test AS SELECT addr,NAME, junum FROM TBL_TEST1

INSERT into v_test(NAME,addr, junum) VALUES ('aaa','bbb','12345-456875')
/*테이블에 insert 가능 하지만 속도는 느림*/

SELECT * FROM v_test1

ALTER TABLE tbl_test ADD CONSTRAINT pk_tset PRIMARY KEY(seqno)

ALTER TABLE tbl_test_for ADD CONSTRAINT fk_test_seqno FOREIGN KEY(testno) REFERENCES
tbl_test(seqno)

CREATE SEQUENCE seq_test

create index idx_name on tbl_board(seqno desc, name asc)

 

인덱스 사용예 ex)

SELECT /*+INDEX(idx_board)*/seqno,title,writer,passwd,
 to_char(writerdate,'yyyy.MM.dd') writedate,content,email,homepage, viewcnt,replycnt
 FROM tbl_board board

 

 

 

 

 

 

1234

+ Recent posts