"jdbc:oracle:thin:@localhost:1521:XE" 의 의미

jdbc - jdbc 라이브러리

oracle - 오라클로 연결

thin - 자바로 연결 (반대는 OCI - OS로 작동)

@localhost -  내 내부 아이피로 접속

1521 - 포트번호

XE - 리스너

thin : 자바 기준

자바가 들고 있는 라이브러리로 작동

어느 플랫폼이건 작동한다

OCI : OS 기준

OS가 들고 있는 라이브러리로 작동

해당 OS만 작동한다

 

static을 사용하여 인스턴스생성시 코드를 바로 실행 할 수있다

 

 

 

 

들어가기 전에...

빠른 이해를 위해 먼저 아래의 내용을 보고 오길 바란다

https://ondolroom.tistory.com/249

 

자바 문자 보내기

COOLSMS 서비스에 가입하고 API 또는 SDK를 사용하여 문자를 보내본다 SDK 중 자바 코드를 다운로드 ZIP파일을 풀어서 IDE의 라이브러리 폴더에 넣고 빌드패스를 해준다 사이트의 EXAMPLE을 보고 복붙하여 조..

ondolroom.tistory.com

https://ondolroom.tistory.com/265

 

자바 프로그램을 함수화(모듈화) 하기

*해당 문서는 본인의 사견이 포함되어 있으므로, 정석이 아닌 점을 참고해주세요. 프로그램과 모듈 1. 프로그램 main이 포함되어 있어서 실행이 가능한 코드를 프로그램이라고 한다. 2. 모듈 아래와 같이 main이..

ondolroom.tistory.com

 

예제를 메서드로 변환하기

다른 파일에서 문자보내기를 하려면 해당 클래스를 모듈화 하여야 한다.

 

아래와 같이 변경하자 ( 다른 방법으로는 생성자에 담는 방법도 있다. 원하는 대로 활용하자)

 

다른 파일에서 불러오기 

아주 간단하다.

같은 패키지 내의 클래스는 바로 불러올 수 있기 때문에

위에서 만든 클래스의 인스턴스를 생성하고 메서드를 호출하면 된다.

 

진짜 번호를 넣고 테스트 해본 결과

아래와 같이 뜨면 잘 전송 된 것이다.

 

휴대폰에서도 확인

 

준비물 : 자바, 오라클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에서도 확인해보자

 

이렇게 필요한 기능을 간단히 구현해보았다

좀 더 복잡한 기능구현은 추후에 따로 만들어 보기로 한다

 

들어가기 전에...

처음 들어오신 분은 아래 페이지를 먼저 읽어보도록 합시다

https://ondolroom.tistory.com/265

 

자바 프로그램을 함수화(모듈화) 하기

*해당 문서는 본인의 사견이 포함되어 있으므로, 정석이 아닌 점을 참고해주세요. 프로그램과 모듈 1. 프로그램 main이 포함되어 있어서 실행이 가능한 코드를 프로그램이라고 한다. 2. 모듈 아래와 같이 main이..

ondolroom.tistory.com

https://ondolroom.tistory.com/266

 

공공데이터를 사용하기 요약

들어가기 전에... 먼저 프로그램은 모두 간단한 원리부터 파악하고 제작 해야한다. hello, world!를 출력하는 프로그램이나 공공데이터를 받아와서 출력 하는 프로그램이나 원리는 같다. 코드 길이가 조금 더 길어..

ondolroom.tistory.com

 

공공데이터 모듈 만들기

공공데이터 사용하기 내용에서 모듈을 살짝 바꾸었다

String을 리턴하는게 아닌

객체 그 자체를 리턴하도록 변경(안의 모든 데이터를 이용할 수 있기위함)

 

WindowBuilder로 GUI만들기

WindowBuilder를 이용하여

검색할 위치 + Jtextfield

검색버튼

출력될 내용을 보여줄  JtextArea를 제작

 

 

전역에서 필요한 기능을 미리 선언해두기

위 GUI에서 우리는

검색버튼을 누르면

JtextField의 내용을 가져와서 가공하여

JtextArea에 넣어줘야한다

 

JtextField의 내용을 가져오고
JtextArea에 내용을 넣기 위해서는 전역공간에 있어야한다는 점을 참고하자

 

 

JButton에 리스너 추가하기

기본 상태의 initialize() 모습.

우리는 여기서 JButton에 리스너를 추가해야한다

 

 

테스트

이제 실행시키면 잘 작동한다

들어가기 전에...

먼저 프로그램은 모두 간단한 원리부터 파악하고 제작 해야한다.

hello, world!를 출력하는 프로그램이나 공공데이터를 받아와서 출력 하는 프로그램이나 원리는 같다.

코드 길이가 조금 더 길어졌을 뿐이다.

공공데이터를 이용하든, String을 이용하든 결국엔 모듈화 하여 기능을 실행하게 된다.

https://ondolroom.tistory.com/265

 

자바 프로그램을 함수화(모듈화) 하기

*해당 문서는 본인의 사견이 포함되어 있으므로, 정석이 아닌 점을 참고해주세요. 프로그램과 모듈 1. 프로그램 main이 포함되어 있어서 실행이 가능한 코드를 프로그램이라고 한다. 2. 모듈 아래와 같이 main이..

ondolroom.tistory.com

위의 링크 내용을 숙지하고 아래 이미지를 보자

 

 

 

공공데이터 처리

1.순서

공공데이터 링크확인
http://www.jsonschema2pojo.org/ 으로 Class파일 쉽게 만들기
Gson으로 Json -> 자바객체 전환하기
이용하기

Gson 이 설치 되지 않으신 분들은 미리 설치하시고 시작해주세요

 

2. 적용 과정

1) 예시로 링크 주소는 공적 마스크 판매 약국 데이터로 한다

https://8oi9s0nnth.apigw.ntruss.com/corona19-masks/v1/stores/json?page=1

 

2) 해당 링크로 인터넷에서 접속해보면 아래와 같이 나온다

 

3) 해당 데이터를 이용해서 데이터를 담을 Class 를 만들어보자

아래 데이터를 긁어서 http://www.jsonschema2pojo.org/ 사이트에 넣어보자

{
  "count": 487,
  "page": "1",
  "storeInfos": [{
    "addr": "충청남도 홍성군 갈산면 상촌로 12-1",
    "code": "34840559",
    "lat": 36.6029863,
    "lng": 126.5489114,
    "name": "신신약국",
    "type": "01"
  }, {
    "addr": "대구광역시 달서구 달구벌대로 1736 1층 (두류동)",
    "code": "37844571",
    "lat": 35.856678,
    "lng": 128.5552778,
    "name": "밝은온누리약국",
    "type": "01"
  }],
  "totalCount": 26776,
  "totalPages": 54
}

 

 

Preview를 누르면 각각의 파일이름과 내용이 생성 된다

이클립스에 파일을 만들어서 각각 붙여넣기를 하자

 

4 ) 공공데이터 출력하기

 

위 코드에 아래 코드를 넣고 조금만 수정하면된다!

아래코드는 외울 필요 없이 어디 저장해놓고 두고두고 사용하자

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("json링크 주소 입력");

			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();

			// 3번 버퍼 연결 (문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

			// 4. 문자 더하기
			StringBuilder sb = new StringBuilder();

			// 스트링빌더에 버퍼에서 받은 문자열을 한줄씩 추가하기
			String input = "";
			while ((input = br.readLine()) != null) {
				sb.append(input);
			}
			
			// 입력이 잘 되었는지 테스트
			System.out.println(sb.toString());
			System.out.println();

			br.close(); // 버퍼 닫기
			con.disconnect(); // 스트림 닫기

			// 5. 자바 오브젝트로 변환
			Gson gson = new Gson();
			Air air = gson.fromJson(sb.toString(), Air.class);

		} catch (Exception e) {
			e.printStackTrace();
		}

 

우리가 바꿀 것은 몇가지 없다.

url 주소넣기
자바 오브젝트 이름을 내가 정한 이름으로 바꾸기
리턴해주기

 

3. main에서 출력하기!

*해당 문서는 본인의 사견이 포함되어 있으므로, 정석이 아닌 점을 참고해주세요.

프로그램과 모듈

1. 프로그램

main이 포함되어 있어서 실행이 가능한 코드를 프로그램이라고 한다.

 

2. 모듈

아래와 같이 main이 아닌 함수만 있어서 독립적으로 실행하지 못하는 코드를 모듈이라고 한다.

 

모듈을 이용하는 방법

1. 같은 파일 내에 있는 모듈

main에서 해당 기능이 있는 클래스.메서드() 를 이용하여 호출한다.

(이 파일에는 모듈도 있고 실행 시킬 수 있는 main이 있으니, 결과적으로 프로그램이다. )

 

2. 패키지는 같지만 다른 파일 내에 있는 모듈

아래 그림처럼 패키지는 같지만 다른 파일로 나뉘어 있을 경우

같은 파일에 있는 모듈을 사용하는 것 처럼 쉽게 이용가능하다.

Say.java
Function1.java

 

3. 패키지가 다른 모듈

아래 그림처럼 패키지가 다른 경우

모듈이 될 클래스나 기능들은 public으로 작성해야 불러올 수 있다. 

exModule.Say.java

 

main이 있는 파일에서는 모듈을 import 해와야 한다.

example.Function1.java

 

*exModule에 있는 코드에서 public을 제거 해보고 테스트도 해보자.

 

ps. 생성자를 함수처럼 사용 가능하다

아래 그림과 같이 Say의 생성자에 기능을 넣고 

main에서 해당 클래스를 인스턴스화 하면 생성자가 실행 된다.

+ Recent posts