작업 내용 : 전체 관리 (MainClass.java)

"newsdata.txt" 파일을 줄 단위로 읽고,
'경향신문, nsd16500796.gif, http://newsstand.naver.com/032, 종합' 중
'nsd16500796.gif, http://newsstand.naver.com/032' 만 mySQL에 영구 보존
mySQL의 데이터를 조회하여 
html 파일을 생성

====================================

작업 1. "newsdata.txt" 파일을 줄 단위로 읽기 : 

	FileReadWriteClass.java
	
	내부 메서드 : ArrayList<String> readTextLine(String uri)
	
	createHTML()
	
	​
	
	1-1. 파일의 경로를 String 변수에 저장 : 
	
	=> MainClass 에서 String uri="c:/filetest/newsdata.txt";
	
	1-2. 파일읽기 : FileReader.class 
	
	1-3. 줄 단위로 읽기 : BufferedReader.class 의 readLine() <= 한 줄만 읽는 메서드(String)
	
	readLine()으로 한 줄씩 읽을 때마다 ArrayList<String> 타입 객체에 add()

======================================

작업 2, 3 : 

DBReadWriteClass.java

내부메서드 : connectMySQL() / selectData() / insertData()


작업 2. 한 줄 읽은 데이터들 분리 
	
	2-1. 분리 메서드 : String.class 의 split("구분자") <=반환 타입 : String[]
	
	2-2. 분리된 데이터 일부분 추출 : String[] 의 1, 2 번 데이터 추출

​

작업 3. SQL 문을 이용하여 mySQL 에 저장

	3-1. mySQL 드라이버 로드 : Class.forName("드라이버이름") <= ClassNotFoundException
	
	3-2. 데이터베이스 접속 : DriverManager.getConnection("주소/db", "아이디", "비밀번호")
	
	<= SQLException 
	
	3-3. 쿼리(Query) 문 실행 
	
	3-3-1. Statement 객체 생성 : Connection 객체.createStatement()
	
	3-3-2. Query 실행 : Statement객체.executeUpdate("실행Query") <=반환 타입 int

========================================================

작업 4. mySQL의 데이터를 조회 : DBReadWriteClass 의 selectData()

	4-1. selectData() 조회된 결과를 반환
	
	4-2. 데이터베이스 접속 : 기존 connectMySQL("DB명") 를 활용
	
	4-3. 데이터 조회 : select * from news_table 쿼리 필요
	
	4-3-1. 쿼리실행 : Statement.class 의 executeQuery("실행쿼리") 메서드 사용
	
	4-3-2. 쿼리 실행 후, 반환되는 데이터 : ResultSet 객체
	
	4-4. 결과 값 반환(return ResultSet 객체 반환)

======================================================== 

작업 5. html 파일을 생성 : FileReadWriteClass 의 createHTML(ResultSet rs)

	5-1. 한 줄 단위로 파일에 적기 
	
	5-1-1. FileWriter.class : 파일경로와 파일명.확장자 (c:/filetest/news.html)
	
	FileWriter fw=new FileWriter("파일경로")
	
	5-1-2. 한 줄 씩 적기 : BufferedWriter.class 의 write() 
	
	write("HTML 코드") 
	
	5-1-3. 마지막에는 반드시 close() 를 이용하여 파일 내용을 저장
	
	<html>
	
	<head><title>naver news stand</title></head>
	
	<body>
	
	<table border=1>
	
	<tr><th>Image</th><th>URL</th></tr>
	
	​
	
	<tr>
	
	<td>rs.getString("imgname")</td>
	
	<td>rs.getString("urlname")</td>
	
	</tr>
	
	​
	
	</table>
	
	</body>
	
	</html>
	
	​
	
	완료!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

====================================

추가 작업 1. 이미지 파일명 대신 이미지를 직접 출력

1-1. 이미지를 출력하는 HTML 코드 : 

<img src="파일경로/이미지파일" >

1-2. 이미지 파일 경로 : 현재 html 파일이 있는 하위폴더(newsImages)내에 존재

1-2-1. 현재 html 파일이 있는 위치 ./newsImages/ 

<img src=./newsImages/~~~.gif > 

1-3. 1-2-1. 의 HTML 코드 위치 : <td>rs.getString("imgname")</td>

<td><img src=./newsImages/+rs.getString("imgname")+ ></td>

========================================= 

추가 작업 2. URL을 마우스로 클릭하면 해당 페이지로 이동

2-1. 페이지 이동 HTML 코드 : <a href=이동주소 >화면에 보여지는 내용</a> 

2-2. HTML 코드 위치 : <td>rs.getString("urlname")</td>

"<td><a href=" + rs.getString("urlname") + " >"+ rs.getString("urlname") +"</a></td>"

 

1.FileDataReadClass

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

​public class FileReadWriteClass {

	public FileReadWriteClass() {
	}

	// 외부 txt 파일을 줄 단위로 읽어서 ArrayList로 반환하는 매소드
	public ArrayList<String> readTextLine(String uri) {
	
		ArrayList<String> lines = new ArrayList<String>();// add시킬 ArrayList
		
		try {
			FileReader fr = new FileReader(uri);
			BufferedReader br = new BufferedReader(fr);// 한 줄 단위로 읽어주는 클래스
			
			while (true) {// 무한반복
				String line = br.readLine();// 실제로 한 줄 읽는 것
		
				if (line == null) {
					return lines;
				}
				// System.out.println(line);
		
				lines.add(line);
			}
		} catch (FileNotFoundException e) {
			System.out.println("ERR readTextLine File 입출력 오류" + e.getMessage());
		} catch (IOException e) {
			System.out.println("ERR readTextLine 내부 br.readLine();오류" + e.getMessage());
		}
			return lines;// try 구문은 실행이 완료 되면 사라지기 때문에 ArrayList<String> lines = new
		
		// ArrayList<String>();를 밖에다가 써준다.	
	}

	public void createHTML(ResultSet rs) {
	
		String url = "c:/filetest/news.html";
	
		try {
			FileWriter fw = new FileWriter(url);
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write("<html>");
			bw.write("<head><title>naver news</head></title>");
			bw.write("<body>");
			bw.write("<table border=1>");
			bw.write("<tr><th>image</th><th>URL</th></tr>");
			
			while (rs.next()) {
				bw.write("<tr>");
				bw.write("<td><img src=./newsimages/" + rs.getString("imgname") + "></td>");
				bw.write("<td><a href=" + rs.getString("urlname") +">"+ rs.getString("urlname")+"</a></td>");
				bw.write("</tr>");
			}
			bw.write("</table>");
			bw.write("</body>");
			bw.write("</html>");
			bw.close();
		} catch (IOException e) {
			System.out.println("ERR FileWriter 입출력 오류" + e.getMessage());
		} catch (SQLException e) {
			System.out.println("ERR ResultSet 데이터 오류" + e.getMessage());
		}
	}
}

2.DBReadWriteClass

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;//컨트롤+쉬프트+o

public class DBReadWriteClass {
		
	public DBReadWriteClass() {
	}
	
	public void insertData(ArrayList<String>lines){
	
		//String line = lines.get(0);
		//System.out.println(line);// 첫번째 데이터가 나오는지 확인(경향신문, nsd16500796.gif, http://newsstand.naver.com/032, 종합)
		//String[]words = line.split(", ");//데이터를 ()기준으로 떨어트려준다
		//System.out.println(words[1]+"_"+words[1].length());//길이 값을 알려준다.(테이블 만들 때 사용)
		//System.out.println(words[2]+"_"+words[1].length());
		//String queryInsert = "insert into news_table (imgname,urlname) values('"+words[1]+"','"+words[2]+"')";// 자바는 띄어쓰기를 잘 해야한다. mysql은 알아서 이해한다.
		//String data = words[1]+","+words[2]+")";
		//System.out.println(queryInsert+data);//insert into news_table (imgname,urlname) values(nsd16500796.gif,http://newsstand.naver.com/032)
		//문자열 분리 및 쿼리문 테스트 준비 끝
		//실제 테이블에 데이터 삽입예정
		
			this.connectMYSQL("naver_db");//insertData에서 connectMYSQL을 실행해준다. 메인에 갈 필요 없음으로.
		
			try {
				Statement stmt =mysqlConnect.createStatement();
				//System.out.println("SQL쿼리 성공");
			
			for(int i=0;i<lines.size();i++){
				
				String line = lines.get(i);// 한 줄 문자열 추출후 저장
				String[]words = line.split(", ");//저장된 문자열 분리하여 저장
				String queryInsert = "insert into news_table (imgname,urlname) values('"+words[1]+"','"+words[2]+"')";// 자바는 띄어쓰기를 잘 해야한다. mysql은 알아서 이해한다.
				
				int n=stmt.executeUpdate(queryInsert);//쿼리 실행
				
				if(n>0){
					System.out.println(i+"데이터 삽입 성공");//데이터 삽입여부확인
				}
			}
		
		//int n=stmt.executeUpdate(queryInsert);
		//if(n>0){
		//System.out.println("테이터 삽입성공");
		//}else{
		//System.out.println("데이터 삽입실패");
		//}
		
			} catch (SQLException e) {
				System.out.println("ERR SQL 쿼리 오류"+e.getMessage());
			}finally{//실행 : try{}문제가 없을 경우, catch(){} 실행종료
			
			try {
				mysqlConnect.close();//자원해제 시켜주는 메소드(.close();)
			} catch (SQLException e) {
				System.out.println("ERR mysqlConnect.close(); 오류"+e.getMessage());			
			}
		}
	}
	
		Connection mysqlConnect=null;
	
	public void connectMYSQL(String dbname){//데이터베이스 이름만 바뀌기 때문에 이 매소드를 전달할 때 호출 받을 예정((String dbname)
	
		String driverName = "com.mysql.jdbc.Driver";//드라이버 명칭은 고정
		String dbURL = "jdbc:mysql://localhost:3306/";//127.0.0.1 로컬호스트 번호
		String adminID = "root";
		String adminPW = "920424";
	
	try {
		Class.forName(driverName);
		//System.out.println("mysql 드라이버 로드 성공");
		
		mysqlConnect=DriverManager.getConnection(dbURL+dbname,adminID,adminPW);
		//System.out.println("db접속성공");
		
		} catch (ClassNotFoundException e) {
			System.out.println("ERR mysql 드라이버 로드 오류"+e.getMessage());
		} catch (SQLException e) {	
			System.out.println("ERR db접속 오류"+e.getMessage());	
		}
	}
	
	public ResultSet selectData(){
		this.connectMYSQL("naver_db");
		ResultSet rs = null;
		try {
		Statement stmt = mysqlConnect.createStatement();
		rs = stmt.executeQuery("select * from news_table");
		} catch (SQLException e) {
			System.out.println("ERR selectData내부 오류"+e.getMessage());
		}
		return rs;
	}
}

3.MainClass

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class MainClass {
	
	public static void main(String[] args) {
	
		//String uri = "c:/filetest/.txt";
		
		FileReadWriteClass frwc = new FileReadWriteClass();
		
		//ArrayList<String> lines = frwc.readTextLine(uri);
		//System.out.println(lines.size()); 확인코드
		//System.out.println(lines.get(0)); 확인코드
		
		DBReadWriteClass dbrw = new DBReadWriteClass();
		
		ResultSet rs=dbrw.selectData();
		
		/*try {
		System.out.println(rs.next());
		} catch (SQLException e) {
		System.out.println("ERR ResultSet 조회 실패 오류"+e.getMessage());
		}
		
	//dbw.insertData(lines);//DBReadWriteClass가 가지고 있는 메소드를 호출*/
		
	frwc.createHTML(rs);
	}

}


 

+ Recent posts