Learn/KH정보교육원

[KH정보교육원 당산] 19일차 ( 데이터베이스 - Oracle )

Dahoon06 2021. 4. 5. 11:15
728x90
반응형

오라클 설치

 

오라클 명령어

 

명령어

콘솔에서 sqlplus로 이동 후 사용자 계정을 생성하기 위한 관리자 접속 conn sys as sysdba conn => 데이터 접속 명령 sys => 데이터베이스 시스템 sysdba => 데이터베이스 시스템관리자 계정 생성 SQL > Create u.

june-17.tistory.com

 

 

오라클 연결

드라이버 추가

project - Build Path - Configure Build Path - Adds external Jars 

 

자바가 데이터 베이스 접속하는 순서

1.드라이버 로딩

패키지에 있는 클래스 사용

=> "oracle.jdbc.driver.OraclDriver"

     Class.forName("oracle.jdbc.driver.OracleDriver");

 

2.드라이버매니저를 이용하여 DB접속하고 Connection 객체 가져오기

=> String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";

     thin : 무료 버전

     XE => express버전이기 때문에

     IP 주소 : 집에서 실행시켰기 때문에 127.0.0.1

     포트번호 : 1521 -> 회사마다 다를 수도 있다.

     Connection conn = DriverManager.getConnection(url,"계정","비밀번호");

 

Connection까지 한 모습

 

연결 성공
비밀번호를 틀리게 입력해봤다.

 

3.SQL명령어(쿼리 : Query)를 실행시키기 위한 객체를 Connection 객체로 부터 얻어오기

(Statement, PreparedStatement,...)

=> Statement : 단순 조회할 때 사용(select) 

  순수 문자열로 쿼리를 사용할 때 자주 사용 => "select * from member";

 

     PreparedStatement : 조건을 이용하여 조회(select) 삽입(insert into) 수정(update set) 삭제(delete from)

   쿼리문과 변수가 혼합될 경우

예)

String n = "testID";

String query = "select * from member where userID=n"; <= 여기서의 n은 변수가 아니라 문자 n이 되버린다.

String query = "select * from member where userID="+n;

=> select * from member where userID=testID 이렇게 되버린다. => 

select * from member where userID='testID'; // 이런 형태를 가져야한다.

 

4.원하는 작업 수정,삭제, 조회,추가하기

ResultSet 객체의 next() 메소드를 이용하여 record를 한개씩 읽어낼 수 있다.

next()메소드 : 반환타입 Boolean

rs.getString("필드(컬럼)명);  =>  rs.getString("name");
rs.getString(필드(컬럼)명의 index) => rs.getString(1); => 1부터 시작, 0을쓰면 인덱스 에러

행은 0부터 시작이지만 열은 1부터 시작이다.                                                  

 

 

 

 

예제).

문제1. 주어진 파일을 이용하여 데이터베이스에 저장한 후, 저장된 파일을 html파일로 출력

문제2. 셀프 가능 주요소 개수와 비 셀프 주유소의 개수 파악.

 

내 생각)

문제에 나온대로 데이터들을 오라클에 넣어 저장 시켜뒀고 JDBC_Class를 만들어 오라클과 연동을 시켜줬다.

연동 후에 나온 데이터들은 하나의 문자열 형태로 나오기 때문에 인덱스 구분이 필요하다고 생각했다.

새로운 배열 변수를 만들어서 "\n"기준으로 분할 시켜 변수에 데이터를 저장했는데... ArrayIndexBoundException이 나오네...어찌해서 저 에러는 해결했는데 이번에는 데이터를 다 읽어들인 후 마지막줄에 한줄을 더 읽는다..

데이터베이스에서 꺼낸값을 DataClass에 저장하기 위하여 객체 생성도 해놨고 

데이터를 꺼내기 위한 OilBankClass도 만들어 각각의 데이터 타입에 맞게 생성자를 생성해 놨다.

근데 해보니까 저 2개의 클래스는 쓰질않아서 필요없는거 같다.

 

연동 과정
MainClass
마지막에 한줄을 더 읽어버린다..

 

내일 오전에 문제풀이니... 그때까지 다시 생각해보자

728x90
반응형