본문 바로가기

programming/Gukbi

국비 교육 31일차 - oracle

728x90
반응형

자바를 저번시간으로 전부 끝내고 오라클을 새로 들어갔다. 

이번부터 굉장히 중요하다고 했으니 정말 집중해서 들어야겠다. 

 

사실 나는 굉장히 오래전부터 데이터베이스 배우는걸 기대하고 있었는데, 데이터베이스를 연결 할 수 있어야 엑스형 홈페이지 방명록이 가능해지기 때문이다.. 

 

여튼 레고

package com.sist.dao;
import java.sql.*;
// VO, DAO
/*
 * 	SQL
 * 	 = DML (데이터 조작언어)
 * 		= SELECT : SEARCH
 * 			= JOIN 
 * 			= SUBQUERY
 * 		= INSERT : ADD
 * 		= UPDATE : CORRECT 
 * 		= DELETE : REMOVE
 * 	 = DDL (데이터 선언언어) => 제약조건 (PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE, DEFAULT)
 * 		= CREATE : 생성
 * 			TABLE, VIEW, INDEX, SEQUENCE, PROCEDURE, FUNCTION, TRIGGER
 * 		= ALTER : 수정
 * 		= DROP : 삭제
 * 		= TRUNCATE : 잘라내기
 * 		= RENAME : 이름변경
 * 	 = DCL (데이터 제어언어)
 * 		= GRENT : 권한 부여
 * 		= REVOKE : 권한 해제
 * 	 = TCL (트랜젝션 제어언어)
 * 		= COMMIT
 * 		= ROLLBACK
 * 
 * 	PL/SQL
 * 	   ===
 * 	==
 * 	함수를 만드는 언어 : 재사용 
 */
public class MainClass {

		public static void main(String[] args) {
			
			try
			{
				// 1. Driver 등록 => Oracle 제공
				Class.forName("oracle.jdbc.driver.OracleDriver");
				// 2. 연결 
				String url="jdbc:oracle:thin:@localhost:1521:XE"; //오라클 주소
				Connection conn=DriverManager.getConnection(url,"hr","happy");
				// 3. sql 문장 전송
				String sql="SELECT empno, ename, job, hiredate, sal FROM emp WHERE hiredate LIKE '81%'";
				// 		startsWith 
				// 오라클 => 대소문자 구분이 없다 (약속 =>키워드는 대문자로 한다)
				// class interface name => 대문자로 시작, 변수,메소드 => 소문자
				PreparedStatement ps=conn.prepareStatement(sql);
				/*
				 * empno
				 * ename
				 * job
				 * mgr
				 * hiredate
				 * sal
				 * comm
				 * deptno
				 * 
				 * 이 중에서 5개의 정보만 달라고 한 것
				 */
				// 4. 결과값 받아서 출력 
				ResultSet rs = ps.executeQuery();
				while(rs.next()) // 한줄씩 읽어 온다 => 데이터가 없으면  false되서 종료됨
				{
					// 데이터형 맞춰서 가져와야함
					System.out.println(
							rs.getInt(1)+" "
							+rs.getString(2)+" "
							+rs.getString(3)+" "
							+rs.getDate(4)+" "
							+rs.getInt(5)
							);
				}
			}catch(Exception ex) {
				ex.printStackTrace();
			}
			
		}
}

위의 소스코드는 오라클에서 Driver를 등록하고 연결해와서 sql 문장을 통해서 자바에서 데이터를 받아와 출력하는 문장이다. 

그리고 앞으로 데이터베이스를 통해서 여러 프로그램들을 제어해야하기 때문에,

쓸 소스들을 다 미리 긁어뒀다. 

 

package com.sist.music;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;

/*
 * 	Oracle 연결 (오라클 : 데이터베이스 (데이터를 저장하는 장소 => 데이터 공유))
 * 	1. 데이터형 
 * 		숫자형
 * 		 NUMBER(10), NUMBER(7,2)
 * 		 ========= 	 ==========
 * 			int 		double
 * 		문자형
 * 			CHAR, VARCHAR2, CLOB => String
 * 		날짜형
 * 			DATE => Date
 * 		===> int, double, String, Date
 * 
 * 	2. 데이터를 모이서 전송
 * 		ArrayList => 제네릭스 (데이터형 통일)
 * 	3. Connection, Statement, ResultSet
 * 	4. 예외처리 
 * 	====================================
 */
// 웹 크롤링
public class GenieMusic {
	public void getGenieMusic() {
		try 
		{	int k=1;
			for(int i=1; i<=2; i++)
			{
				
				//Document doc=Jsoup.connect("https://www.genie.co.kr/chart/top200?ditc=D&ymd=20210205&hh=17&rtm=Y&pg="+i).get();
				Document doc=Jsoup.connect("https://www.genie.co.kr/chart/genre?ditc=D&ymd=20210204&genrecode=M0100&pg="+i).get();
				// title, singer, album, poster, state, idcrement, rank
				Elements title=doc.select("tr.list a.title"); 
				Elements singer=doc.select("tr.list a.artist");
				Elements album=doc.select("tr.list a.albumtitle");
				Elements poster=doc.select("tr.list a.cover img");
				Elements etc=doc.select("tr.list span.rank");
				for(int j=0; j<title.size(); j++)
				{
					
					System.out.println("순위:"+(k++));
					System.out.println("제목:"+title.get(j).text());
					System.out.println("가수:"+singer.get(j).text());
					System.out.println("앨범:"+album.get(j).text());
					System.out.println("포스터:"+poster.get(j).attr("src"));
					String str=etc.get(j).text();
					// 유지
					// 2하강
					// 1상승
					String state=str.replaceAll("[^가-힣]", ""); // 한글을 제외하고 나머지는 공백
					String id="";
					if(state.equals("유지"))
					{
						id="0";
					}
					else
					{
						id=str.replaceAll("[^0-9]", "");
					}
					System.out.println("상태:"+state);
					System.out.println("등폭:"+id);
					//System.out.println("상태:"+etc.get(j).text());
					System.out.println("========================");
				}
				
			}
		}catch(Exception ex) {ex.printStackTrace();}
	}

	public static void main(String[] args) {
		
		GenieMusic gm=new GenieMusic();
		gm.getGenieMusic();
	}

}

 

 

이건 저번시간에도 했던거지만 Jsoup을 통해서 필요한 데이터를 긁어와서 저장하는 소스코드이다. 

웹사이트의 대부분은 문자열로 이루어져 있기 때문에 문자열을 필요한대로 가공해서 써야한다. 

 

 

 

사실 이날은 오전에 오라클 깔고, 오후에 시험보고해서 진도를 많이 나가지는 못했다. 

이제 다음주부터 제대로 오라클 수업 진도를 나가게 될 것 같다. 

728x90
반응형