들어가기 전에...

필자는 STS툴(이클립스)를 사용하고 있으며, WindowBuilder로 스윙을 간단히 구현하고,
자세한 코드는 직접 짜는 것을 추천한다.

이클립스 마켓에서 윈도우빌더를 설치하자.

 

WindowBuilder생성

 

패키지에서 마우스 오른쪽을 눌러 new - other 

 

WindowBuilder - Application Window를 선택한다

 

클래스 명을 적고 파일을 생성하면 오른쪽 아래에 Design이 있다.

 

이런식으로 화면을 미리보기하며 Gui방식으로 스윙을 제작할 수 있다.

 

jfxrt.jar 빌드패스

자바에는 스윙에 웹페이지를 출력할 수 있지만 빌드패스를 하지 않으면 사용하지 못하도록 해놓았다.

JRE 폴더에서 jfxrt.jar을 찾아서 프로젝트 폴더에 빌드 패스하자

jfxrt.jar 검색

 

빌드패스

 

웹뷰 클래스를 생성하자

 

좋은 예제가 있어서 살짝 가공하였다. 아래와 같이 모듈화하고 언제든 사용하자.

코드를 복사하려면 더보기 클릭

더보기
package example;

import javax.swing.*;

import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class WebEx1 extends JFrame {
	
	public static void initAndLoadWebView(final JFXPanel fxPanel) {
		Group group = new Group();
		Scene scene = new Scene(group);
		fxPanel.setScene(scene);

		WebView webView = new WebView();

		group.getChildren().add(webView);
		webView.setMinSize(500, 500);
		webView.setMaxSize(500, 500);

		WebEngine webEngine = webView.getEngine();

		webEngine.load("http://www.naver.com");
		
	}

}

 

 

 

WindowBuilder를 이용하여 Gui를 제작해보자

 

새로운 java파일을 만들자.

WindowBuilder로 만들면 간단하다.

기본 화면에다가 Jpanel만 하나 추가하였다.

이만큼만 만들고 소스코드로 가보자.

 

소스코드 내용 변경 (JPanel을 JFXPanel로)

 

소스코드에서 JPanel을 JFXPanel로 바꾸어야한다.

위의 JPanel을 아래의 JFXPanel로 변경

 

그리고 panel.setLayout(null); 밑에 아래코드를 추가하자

		Platform.runLater(new Runnable() {

			public void run() {

				WebEx1.initAndLoadWebView(panel);

			}

		});

 

결과

실행해보면 인터넷창이 SWING안에서 구현되었다.
창 사이즈는 WebEx1 클래스와 메인클래스에서 조절하자.

 

참고

https://m.blog.naver.com/PostView.nhn?blogId=dnfvm679&logNo=221300348407&proxyReferer=https:%2F%2Fwww.google.com%2F

 

Java - JavaFX를 이용해 GUI에 웹표시하기

JavaFX? 자바FX(JavaFX)는 데스크톱 애플리케이션과 리치 인터넷 애플리케이션(RIA)을 개발하고...

blog.naver.com

 

prePreparedStatement 장점

'데이터' 등으로 파싱을 안해도된다

코드가 깔끔해진다

인젝션 공격을 막을 수 있다

----

Statement를 쓰면 인젝션공격을 당할 수 있다

prePreparedStatement을 사용하자

 

prePreparedStatement를 사용하여 데이터를 넣으면 or이나 -- 등을 제거해준다

 

"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에서도 확인해보자

 

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

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

+ Recent posts