준비물 : 자바, 오라클DB, SQL Developer
들어가기 전에...
처음 오신 분들은 아래의 내용을 숙지하고 진행하시는 것이 좋습니다.
https://ondolroom.tistory.com/265
자바 프로그램을 함수화(모듈화) 하기
*해당 문서는 본인의 사견이 포함되어 있으므로, 정석이 아닌 점을 참고해주세요. 프로그램과 모듈 1. 프로그램 main이 포함되어 있어서 실행이 가능한 코드를 프로그램이라고 한다. 2. 모듈 아래와 같이 main이..
ondolroom.tistory.com
https://ondolroom.tistory.com/266
공공데이터를 사용하기 요약
들어가기 전에... 먼저 프로그램은 모두 간단한 원리부터 파악하고 제작 해야한다. hello, world!를 출력하는 프로그램이나 공공데이터를 받아와서 출력 하는 프로그램이나 원리는 같다. 코드 길이가 조금 더 길어..
ondolroom.tistory.com
https://ondolroom.tistory.com/267
자바 공공데이터 + SWING 연동하기
들어가기 전에... 처음 들어오신 분은 아래 페이지를 먼저 읽어보도록 합시다 https://ondolroom.tistory.com/265 자바 프로그램을 함수화(모듈화) 하기 *해당 문서는 본인의 사견이 포함되어 있으므로, 정석이 아..
ondolroom.tistory.com
DB 유저 생성
SQL Developer에서 관리자에 접속한 뒤
아이디 test1 비번 test1 을 쳐본다.
위 오류는 오라클 11 버전 이상부터 발생하는 것으로
2가지 해결법이 있다
1. 아이디에 c##을 붙이기
말그대로 test1을 c##test1로 적어서 실행하는 것이다.
이 방법이 헷갈린다면 아래 2번을 따라해보자
2. ALTER SESSION SET "_ORACLE_SCRIPT" = true; 사용하기
아이디 비밀번호를 생성하기 전에 아래처럼 코드를 미리 하나 더 실행 해줘야한다
코드를 복사하려면 더보기 클릭
더보기
ALTER SESSION SET "_ORACLE_SCRIPT" = true ;
CREATE USER test1 IDENTIFIED BY test1;
다시 아이디 비밀번호를 입력하면 정상적으로 실행된다
유저에게 권한주기
생성한 유저에게 권한을 줘야만 테이블 등을 생성하고 내용을 입력 할 수 있다
코드를 복사하려면 더보기 클릭
더보기
GRANT CREATE SESSION TO test1; GRANT CREATE TABLESPACE TO test1; GRANT CREATE TABLE TO test1; alter user test1 default tablespace users quota unlimited on users;
유저 스키마 생성
접속 파트의 +버튼을 눌러서 새 스키마를 생성해보자
스키마의 이름을 적고
아이디 비밀번호를 입력한다
세부정보는 그대로 유지하고 테스트를 해본다
위 사진에서 왼쪽아래에 보면 성공이라고 뜨면 잘 작동하는 것이다
접속을 누른다
접속 파트에 테스트라는 스키마가 생기고
워크시트도 테스트유저로 바뀌었다
테이블 생성
테이블을 마우스 오른쪽 클릭하면 새 테이블 생성메뉴가 있다
들어가 보자
아래와 같이 나온다
테이블 이름은 영어로 하는 것이 좋다
+ 버튼을 이용해서 속성을 추가해보자
약국이름 (NAME)과 주소(LOC)를 만들었다
약국이름은 문자열이기 때문에 VARCHAR2를 사용하였고, 1글자에 3바이트를 가정하고 넉넉하게 40을 주었다
주소 또한 문자열이기 때문에 VARCHAR2를 사용하였고, 넉넉하게 300을 주었다
오른쪽 아래의 확인을 눌러 테이블을 생성한다
접속 파트에 생성 된 테이블을 확인하자
테이블에 데이터 넣기
워크시트에서 테스트 자료를 넣는 코드를 짜보자
아래와 같이 입력해본다
더보기
INSERT INTO drugstore(NAME, LOC) VALUES('테스트약국', '서울특별시 강남구 XX');
정상적으로 삽입된 것을 확인
테이블을 불러와보면 잘 나오는 것을 확인 할 수 있다
마지막으로 커밋을 해주면 DB에 저장된다
오라클 라이브러리를 자바에 연결하기
먼저 컴퓨터에 설치된 오라클이나 디벨로퍼에서 ojdbc8.jar을 찾아본다
해당 파일을 복사해서 이클립스의 개인 라이브러리 폴더에 넣는다
해당 워크스페이스를 오른쪽 클릭하여 빌드패스에 접속한다
라이브러리 탭에서 Add JARs를 선택하고 ojdbc8.jar을 추가한다
추가되었다면 Apply and Close를 누른다
java 코드 작성
TestDB.java라는 파일을 생성하고 어떤 메서드를 넣을 것인지 정한다
아래의 5가지 기능을 구현할 것 이다.
DB에 연결하기 DB 연결 끊기 데이터 넣기(INSERT) 데이터 가져오기(SELECT) 데이터 지우기(DELETE)
과도한 try catch 남발을 방지하고 알아보기 쉬운 코드를 위해 throws Exception을 함수 뒤에 붙여주었다
그리고 약국 정보를 저장할 객체도 만들어 준다
코드를 복사하려면 더보기를 클릭
더보기
package example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
class Info {
String name;
String loc;
public Info(String name, String loc) {
this.name = name;
this.loc = loc;
}
}
public class TestDB {
// 전역 공간에 쿼리에 필요한 레퍼런스를 준비하기
// DB에 연결하기
void openCon() throws Exception {
}
// DB 연결 끊기
void closeCon() throws Exception {
}
// 데이터 넣기
void insertData(String name, String loc) throws Exception {
}
// 데이터 가져오기
void selectData() throws Exception {
}
// 데이터 지우기
void deleteData(String name) throws Exception {
}
public static void main(String[] args) {
}
}
전역 공간에 레퍼런스 준비
함수들이 객체나 데이터를 공유하기 위해서는 레퍼런스가 전역 공간에 준비되어야 한다
코드를 복사하려면 더보기 클릭
더보기
Connection con; // 디비 연결
String query; // 쿼리문 내용
Statement stmt; // 워크시트 (쿼리문 입력 공간)
ResultSet rs; // 결과
ArrayList<Info> storeInfos = new ArrayList<>(); // 결과를 어레이리스트에 저장
DB 연결 메서드
해당 내용은 외울 필요없이 어디에 저장해 놓았다가 꺼내서 쓰자
흐름만 알면된다.
1.자바 라이브러리 파일로딩 2.입출력 객체 생성 3.워크시트 생성
코드를 복사하려면 더보기 클릭
더보기
// 오라클 주소, 아이디 비밀번호
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String userid = "test1";
String pwd = "test1";
// 자바 라이브러리 파일 로드
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("드라이버 로드 성공");
// 네트워크 입출력 객체 생성
System.out.println("데이터베이스 연결 준비...");
con = DriverManager.getConnection(url, userid, pwd);
System.out.println("데이터베이스 연결 성공");
// 워크시트 생성
stmt = con.createStatement();
System.out.println("워크시트 생성");
테스트
main에서 TestDB객체를 생성하고 openCon() 함수를 실행해보자
DB 연결 끊기 메서드
간단하게 .close()를 사용하여 만들 수 있다
더보기
con.close();
System.out.println("데이터베이스 연결 해제");
테스트
연결했다가 끊어본다
DB에 데이터 넣기 메서드
stmt라는 워크시트 객체에 INSERT 쿼리문을 입력하고 실행시키는 작업이다
더보기
query = "INSERT INTO drugstore(name, loc) VALUES('" + name + "', '" + loc + "')";
stmt.executeUpdate(query); // 워크시트에 쿼리문 입력하기
System.out.println(query);
테스트
연결 - 인서트 - 연결해제
sql로 가서 확인해본다
DB에서 데이터 가져오기 메서드
stmt라는 워크시트 객체에 SELECT 쿼리문을 입력하고 실행시키는 작업이다
더보기
query = "SELECT name, loc FROM drugstore";
System.out.println(query);
rs = stmt.executeQuery(query); // 워크시트에 쿼리문 입력하고 데이터 받기
while (rs.next()) {
Info temp = new Info(rs.getString(1), rs.getString(2)); // 약국이름과 위치를 가진 객체 생성
storeInfos.add(temp); //어레이리스트에 객체 추가
}
for (int i = 0; i < storeInfos.size(); i++) { // 약국 이름과 주소를 튜플 수만큼 출력
System.out.println(storeInfos.get(i).name + " : " + storeInfos.get(i).loc);
}
테스트
연결 - 셀렉트 - 연결해제
DB 데이터 지우기 메서드
인서트와 마찬가지로 stmt객체에 DELETE문을 넣어서 실행시킨다
더보기
query = "DELETE drugstore WHERE name like '" + name + "'";
stmt.executeUpdate(query);
System.out.println(query);
테스트
연결 - 딜리트 - 연결해제
sql에서도 확인해보자
이렇게 필요한 기능을 간단히 구현해보았다
좀 더 복잡한 기능구현은 추후에 따로 만들어 보기로 한다