작업 내용 : 전체 관리 (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);
}
}
':: IT > JAVA' 카테고리의 다른 글
웹 개발 할 때 form으로부터 전송 받은 값이 숫자 인지 체크 (0) | 2020.08.14 |
---|---|
20200114 [JAVA] mysql 조회하여 HTML 로 전환 (0) | 2020.03.28 |
20200113[JAVA] mysql 메소드, DB접속 및 쿼리 실행 (0) | 2020.03.28 |
20200113[JAVA] 파일 다루기, 예외처리, 웹 문서파일 만들기 (0) | 2020.03.28 |
20200108~9 [JAVA] extend, 상속, 접근제한자, 오버라이드 (0) | 2020.03.28 |