JDBC 맛보기

부트캠프(END)/Oracle|2022. 6. 15. 17:15

Music.java

package doodoo.vo;

import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Music implements Serializable{
	private int mno; // 고유번호(시퀀스)
	private int cno; // 카테고리 번호
	private String title; // 곡명
	private String poster; // 포스터
	private String singer; // 가수명
	private String album; // 앨범명
	private int idcrement; // 등폭
	private String state; // 상태
}

MusicSystem.java

package doodoo.music;

import java.util.*;
import java.io.*;
import doodoo.vo.*;
public class MusicSystem {
    private static ArrayList < Music > list = new ArrayList < Music > ();
    static {
        try {
            FileInputStream fis = new FileInputStream("c:\\javaDev\\music_data.txt");
            ObjectInputStream ois = new ObjectInputStream(fis);
            list = (ArrayList < Music > ) ois.readObject();
            ois.close();
            fis.close();
        } catch (Exception ex) {}
    }
    public int menu() {
        Scanner scan = new Scanner(System.in);
        System.out.println("-----Music MENU-----");
        System.out.println("1. Top100");
        System.out.println("2. 가요");
        System.out.println("3. POP");
        System.out.println("4. OST");
        System.out.println("5. 트로트");
        System.out.println("6. 재즈");
        System.out.println("7. 클래식");
        System.out.println("9. 종료");
        System.out.print("insert menu number:");
        return scan.nextInt();
    }

    public void print(int cno) {
        for (Music m: list) {
            if (m.getCno() == cno) {
                System.out.println(m.getTitle() + "[" + m.getSinger() + "]");
            }
        }
    }
    public void process() {
        while (true) {
            int m = menu();
            if (m == 9) {
                System.out.println("프로그램 종료");
                break;
            } else {
                print(m);
            }
        }
    }
}

MusicDAO.java

package doodoo.dao;

import java.sql.*;
import java.util.ArrayList;

import doodoo.vo.*;
public class MusicDAO {
    private Connection conn;
    private PreparedStatement ps;
    private final String URL = "jdbc:oracle:thin:@localhost:1521:XE";
    private final String USERNAME = "hr";
    private final String PASSWORD = "happy";

    //1.드라이버 등록->한번만 수행할 거니까 생성자로 처리
    public void MusicDAO() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception ex) {}
    }
    //2.데이터베이스 연결->
    public void getConnection() {
        try {
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (Exception ex) {}
    }
    //3.데이터베이스 해제
    public void disConnection() {
        try {
            if (ps != null) ps.close();
            if (conn != null) conn.close();
        } catch (Exception ex) {}
    }
    //4.기능
    //4-1.Music 데이터 추가
    public void musicInsert(Music m) {
        try {
            //1.오라클 연결
            getConnection();
            //2.SQL문장
            String sql = "INSERT INTO music VALUES(?,?,?,?,?,?,?,?)";
            //3.오라클 전송
            ps = conn.prepareStatement(sql); //네트워크
            //4.실행.. SQL Plus에 값을 보내주기 전에 ?에 값을 채워야 한다.
            ps.setInt(1, m.getMno());
            ps.setInt(2, m.getCno());
            ps.setString(3, m.getTitle());
            ps.setString(4, m.getSinger());
            ps.setString(5, m.getAlbum());
            ps.setString(6, m.getPoster());
            ps.setInt(7, m.getIdcrement());
            ps.setString(8, m.getState());

            ps.executeUpdate();

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            disConnection();
        }
    }
    //4-2.데이터베이스에서 Music 읽어오기
    public ArrayList < Music > musicListData(int cno) {
        ArrayList < Music > list = new ArrayList < Music > ();
        try {
            getConnection();
            String sql = "select mno, poster, idcrement," +
                "state, title, singer, album" +
                "from music" +
                "where cno=" + cno;
            ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Music m = new Music();
                m.setMno(rs.getInt(1));
                m.setPoster(rs.getString(2));
                m.setIdcrement(rs.getInt(3));
                m.setState(rs.getString(4));
                m.setTitle(rs.getString(5));
                m.setSinger(rs.getString(6));
                m.setAlbum(rs.getString(7));
                list.add(m);
            }
        } catch (Exception e) {

        } finally {

        }
        return list;
    }

}

MusicData.java

package doodoo.data;

//한번 쓰고 버림
import java.util.*;

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

import java.io.*;
import doodoo.vo.*;
import doodoo.dao.*;

public class MusicData {
    public static void musicAllData() {
        MusicDAO dao = new MusicDAO();
        ArrayList < Music > list = new ArrayList < Music > ();
        String[] urls = {
            "https://www.genie.co.kr/chart/top200?ditc=D&ymd=20220615&hh=11&rtm=Y&pg=",
            "https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220613&genrecode=M0100&pg=",
            "https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220613&genrecode=M0200&pg=",
            "https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220613&genrecode=M0300&pg=",
            "https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220613&genrecode=M0400&pg=",
            "https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220613&genrecode=M0500&pg=",
            "https://www.genie.co.kr/chart/genre?ditc=D&ymd=20220613&genrecode=M0600&pg="
        };

        try {
            int mno = 1;
            int cno = 1;
            for (String url: urls) {
                for (int i = 1; i <= 2; i++) {
                    Document doc = Jsoup.connect(url + i).get();
                    Elements title = doc.select("table.list-wrap td.info a.title");
                    Elements singer = doc.select("table.list-wrap td.info a.artist");
                    Elements album = doc.select("table.list-wrap td.info a.albumtitle");
                    Elements poster = doc.select("a.cover img");
                    Elements etc = null;
                    if (cno == 1) {
                        etc = doc.select("tr.list span.rank span.rank");
                    } else {
                        etc = doc.select("tr.list span.rank");
                    }
                    for (int j = 0; j < title.size(); j++) {
                        //etc
                        /*상승, 2하강, 유지, new 이렇게 가져옴*/
                        String state = "";
                        int id = 0;
                        String etc_data = etc.get(j).text();
                        state = etc_data.replaceAll("[0-9]", "");
                        //						System.out.println(state);
                        if (state.equals("유지") || state.equals("new"))
                            id = 0;
                        else
                            id = Integer.parseInt(etc_data.replaceAll("[가-힣]", ""));

                        try { //데이터가 없으면 스킵하도록!
                            System.out.println(mno + " " + title.get(j).text() + " " + singer.get(j).text() + " " +
                                album.get(j).text() + " " + poster.get(j).attr("src") + " " +
                                state + " " + id);
                            Music m = new Music();
                            m.setMno(mno);
                            m.setCno(cno);
                            m.setTitle(title.get(j).text());
                            m.setSinger(singer.get(j).text());
                            m.setAlbum(album.get(j).text());
                            m.setPoster(poster.get(j).attr("src"));
                            m.setState(state);
                            m.setIdcrement(id);

                            //							list.add(m); DAO가 추가되면서 필요없어짐
                            dao.musicInsert(m);
                        } catch (Exception ex) {}
                        mno++;
                    }
                    System.out.println("----------------------");
                }
                cno++;
                System.out.println("cno=" + cno);
                //				FileOutputStream fos = new FileOutputStream("c:\\javaDev\\music_data.txt");
                //				ObjectOutputStream oos = new ObjectOutputStream(fos);
                //				oos.writeObject(list);
                //				oos.close();
                //				fos.close();  DAO가 추가되면서 필요없어짐
            }
        } catch (Exception ex) {}
    }
    public static void main(String[] args) {
        musicAllData();
    }
}

MusicMain.java

package doodoo.user;

import doodoo.music.*;
public class MusicMain {

	public static void main(String[] args) {
		MusicSystem ms = new MusicSystem();
		ms.process();
	}

}

'부트캠프(END) > Oracle' 카테고리의 다른 글

NVL, LIKE, ORDER BY + JDBC예제  (0) 2022.06.20
데이터베이스(Database)  (0) 2022.06.17
Oracle 설치 및 세팅(Windows x64)  (0) 2022.06.15

댓글()