DTO

DTO
게시글(Board)에 대한 데이터를 담는 DTO

package swing0619;


public class BoardDto {
	private int num;
	private String writer;
	private String title;
	private String content;
	private String regtime;
	private int hits;
	
	

	public BoardDto(int num, String writer, String title, String content) {
		super();
		this.num = num;
		this.writer = writer;
		this.title = title;
		this.content = content;

	}
	
	
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getRegtime() {
		return regtime;
	}
	public void setRegtime(String regtime) {
		this.regtime = regtime;
	}
	public int getHits() {
		return hits;
	}
	public void setHits(int hits) {
		this.hits = hits;
	}



	@Override
	public String toString() {
		return "BoardDto [num=" + num + ", writer=" + writer + ", title=" + title + ", content=" + content
				+ ", regtime=" + regtime + ", hits=" + hits + "]";
	}




	
	
	
	
}

 

DAO

DAO
게시판과 데이터베이스 간의 상호작용을 담당

package swing0619;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;



public class BoardDao {
	// 데이터베이스 연결을 수행하는 메서드
	Connection getConnection() throws ClassNotFoundException, SQLException {
		Class.forName("org.mariadb.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                    "jdbc:mariadb://localhost:3307/jspdb", "root", "maria");
        return conn;
	}
	// selectList() 메서드: 데이터베이스에서 게시글 목록을 조회하는 메서드
	// getConnection()을 호출하여 데이터베이스 연결을 얻고, Statement 객체를 생성하여 SQL 쿼리를 실행합니다. 
	// 조회 결과를 ArrayList<BoardDto>에 담아 반환
	ArrayList<BoardDto> selectList() throws ClassNotFoundException, SQLException {
		Connection conn = this.getConnection();
		ArrayList<BoardDto> list = new ArrayList<>();
		 Statement stmt = conn.createStatement();
	        ResultSet rs 
	        	= stmt.executeQuery(
	        	"select num,writer,title,content from board");
	        while (rs.next()) {
	        	int num = rs.getInt("num");
	        	String writer = rs.getString("writer");
	        	String title = rs.getString("title");
	        	String content = rs.getString("content");
	        	BoardDto dto 
	        		= new BoardDto(num, writer, title, content);
	        	// arrayList에 넣으시오.
	        	list.add(dto);
	}			
	        return list;
}
	public String getCurrentTime() { // 현재 시각을 문자열 형태로 반환하는 메서드
		//현재 시각을 문자열 형태로 반환하는 코드
		return LocalDate.now()+" " // 현재 날짜를 가져옴
				+LocalTime.now().toString().substring(0, 8);
	}
		// 게시글을 데이터베이스에 추가하는 메서드
		int insertOne(BoardDto dto) throws ClassNotFoundException, SQLException {
			Connection conn = this.getConnection();
			Statement stmt = conn.createStatement();
			String sql = String.format("insert into board(writer,title,content,regtime,hits)"
					+ " values ('%s','%s','%s','%s',0)" , dto.getWriter(), dto.getTitle(), 
													dto.getContent(), this.getCurrentTime());
			System.out.println(sql);
			return stmt.executeUpdate(sql);
		}
		
		// 게시글 데이터베이스에 삭제하는 메서드
		int delete(int num) throws ClassNotFoundException, SQLException {
		    Connection conn = this.getConnection();
		    Statement stmt = conn.createStatement();
		    String sql = String.format("delete from board where num = %d", num);
		    return stmt.executeUpdate(sql);
		}
		
		
		// 게시글 테이터베이스에 업데이트 메서드
		int update(BoardDto dto) throws ClassNotFoundException, SQLException {
		    Connection conn = this.getConnection();
		    Statement stmt = conn.createStatement();
		    String sql = String.format("update board set writer = '%s', title = '%s', content = '%s' WHERE num = %d",
		            dto.getWriter(), dto.getTitle(), dto.getContent(), dto.getNum());
		    return stmt.executeUpdate(sql);
		}


		
		
}

 

현재 시각을 출력하는 getCurrentTime() 메서드 정의

package swing0619;

import java.time.LocalDate;
import java.time.LocalTime;

public class Ex1 {

	public static void main(String[] args) {
		Ex1 ex = new Ex1();
		String str = ex.getCurrentTime();
		System.out.println(str);
	}
	public String getCurrentTime() {
		//현재 시각을 문자열 형태로 반환하는 코드
		return LocalDate.now()+" "
				+LocalTime.now().toString().substring(0, 8);
	}

}

 

데이터베이스에서 게시글 목록을 조회하여 리스트에 저장하고 출력하는 코드

package swing0619;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class Ex2 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		ArrayList<BoardDto> list = new ArrayList<>();
		Class.forName("org.mariadb.jdbc.Driver");
        Connection conn = DriverManager.getConnection(
                    "jdbc:mariadb://localhost:3307/jspdb", "root", "maria");
        Statement stmt = conn.createStatement();
        ResultSet rs 
        	= stmt.executeQuery(
        	"select num,writer,title,content from board");
        while (rs.next()) {
        	int num = rs.getInt("num");
        	String writer = rs.getString("writer");
        	String title = rs.getString("title");
        	String content = rs.getString("content");
        	BoardDto dto 
        		= new BoardDto(num, writer, title, content);
        	// arrayList에 넣으시오.
        	list.add(dto);
        }
        //arrayList에서 객체 꺼내어 출력하기
        for (BoardDto dto : list) {
        	System.out.println(dto);
        }
	}

}
<출력>
BoardDto [num=3, writer=ss, title=ddd, content=www, regtime=null, hits=0]
BoardDto [num=4, writer=zz, title=dd, content=sss, regtime=null, hits=0]
BoardDto [num=5, writer=zz, title=dd, content=sss, regtime=null, hits=0]
BoardDto [num=6, writer=zz, title=dd, content=sss, regtime=null, hits=0]
BoardDto [num=11, writer=김티오, title=제목12, content=내용12, regtime=null, hits=0]
BoardDto [num=12, writer=김티오, title=제목12, content=내용12, regtime=null, hits=0]

 

Select 호출

BoardDao 클래스의 selectList() 메서드를 호출하여 게시글 목록을 출력하는 코드

package swing0619;

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

// BoardDao 클래스의 selectList() 메서드를 호출하여 게시글 목록을 출력하는 코드
public class Ex3 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		BoardDao dao = new BoardDao();
		ArrayList<BoardDto> list =  dao.selectList();
		for(BoardDto dto : list) {
			System.out.println(dto);
		}
	}

}
<결과>
BoardDto [num=3, writer=ss, title=ddd, content=www, regtime=null, hits=0]
BoardDto [num=4, writer=zz, title=dd, content=sss, regtime=null, hits=0]
BoardDto [num=5, writer=zz, title=dd, content=sss, regtime=null, hits=0]
BoardDto [num=6, writer=zz, title=dd, content=sss, regtime=null, hits=0]
BoardDto [num=11, writer=김티오, title=제목12, content=내용12, regtime=null, hits=0]
BoardDto [num=12, writer=김티오, title=제목12, content=내용12, regtime=null, hits=0]

 

Insert 메서드 호출

BoardDao 클래스의 insertOne() 메서드를 호출하여 게시글을 추가하는 코드

package swing0619;

import java.sql.SQLException;
	


public class Ex4 {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		BoardDao dao = new BoardDao();
		
		BoardDto dto = new BoardDto(0, "김티오", "제목12", "내용12");
		
		int res = dao.insertOne(dto);
		if(res == 1) {
			System.out.println("DB 입력 성공");
		}else {
			System.out.println("DB 입력 실패");
		}
	}

}

 

Delete 메소드 호출

package swing0619;

import java.sql.SQLException;

public class Ex5 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        BoardDao dao = new BoardDao();

        int num = 10; // 삭제할 게시글의 num 값을 설정

        // 게시글 삭제
        int res = dao.delete(num);

        if (res == 1) {
            System.out.println("게시글 삭제 성공");
        } else {
            System.out.println("게시글 삭제 실패");
        }
    }
}

 

Update 호출

package swing0619;

import java.sql.SQLException;

public class Ex6 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        BoardDao dao = new BoardDao();
        BoardDto dto = new BoardDto(2, "변경", "변경제목", "변경내용");
        
        

        // 게시글 수정
        int res = dao.update(dto);

        if (res == 1) {
            System.out.println("게시글 수정 성공");
        } else {
            System.out.println("게시글 수정 실패");
        }
    }
}

String 클래스

String 생성자

자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리된다. 소스상에서 문자열 리터럴은

String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String객체를 생성할 수도 있다.

어떤 생성자를 이용해서 String 객체를 생성할지는 제공되는 매개값의 타입에 달려 있다.

 

 

package sec02.exam01;

public class ByteToStringEx {

	public static void main(String[] args) {
		byte[]bytes = {72,101,108,108,111,32,74,97,118,97};
		
		String str1 = new String(bytes);
		System.out.println(str1);
		
		String str2 = new String(bytes,6,4);
		System.out.println(str2);
	}

}
<결과>
Hello Java
Java
package sec02.exam01;

import java.io.IOException;

public class KeboardToStringEx {

	public static void main(String[] args) throws IOException {
		byte[] bytes = new byte[100];
		
		System.out.print("입력 :" );
		int readByteNo = System.in.read(bytes);
		System.out.println(readByteNo); // 7
		
		String str1 = new String(bytes, 1, readByteNo-2);
		System.out.print(str1); // ello
		
		String str2 = new String(bytes, 0, readByteNo-2);
		System.out.print(str2); // Hello
		

	}

}
<결과>
입력 :Hello
7
ello
Hello

-2를 한 이유는 캐리지리턴(\r)+라인피드(\n) 부분은 문자열로 만들 필요가 없기 때문에

 

 

문자 추출( charAt( ) )

해당 메소드는 매개값으로 주어진 인덱스의 문자를 리턴한다. 여기서 인덱스란 0에서부터 문자열 길이 -1까지의

번호를 말한다.

 

 

 

문자열 비교( equals( ) ) 

 

 

바이트 배열로 변환 ( getBytes( ) )

종종 문자열을 바이트 배열로 변환하는 경우가 있다. 대표적인 예로 네트워크로 문자열을 전송 하거나,

문자열을 암호화할 때 문자열을 바이트 배열로 변환하는 경우가 있다.

 

ECU-KR은 getBytes()와 마찬가지로 알파벳은 1바이트, 한글은 2바이트로 변환하고,

UTP-8은 알파벳은 1바이트, 한글은 3바이트로 변환한다.

package sec02.exam01;

public class StringGetBytesEx {

	public static void main(String[] args) {
		String str = "안녕하세요";
		
		byte[] bytes1 = str.getBytes();
		System.out.println("bytes1.legth: " + bytes1.length);
		String str1 = new String(bytes1);
		System.out.println("bytes->String: " + str1);
		
		try {
			byte[] bytes2 = str.getBytes("EUC-KR");
			System.out.println("bytes2.length: " + bytes2.length);
			String str2 = new String(bytes2, "EUC-KR");
			System.out.println("bytes2->String: " + str2);
			
			byte[] bytes3 = str.getBytes("UTF-8");
			System.out.println("bytes3.length: " + bytes3.length);
			String str3 = new String(bytes3, "UTF-8");
			System.out.println("bytes3->String: " + str3);
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}
<결과>
bytes1.legth: 15
bytes->String: 안녕하세요
bytes2.length: 10
bytes2->String: 안녕하세요
bytes3.length: 15
bytes3->String: 안녕하세요

 

문자열 찾기 ( indexOf() )

 

문자열 길이 ( length() )

 

 

 

문자열 대치 ( replace() )

replace() 메소드는 첫 번째 매개값인 문자열을 찾아 두 번째 매개값인 문자열로 대치한 새로운 문자열을 생성하고

리턴한다. 

String 객체의 문자열은 변경이 불가능한 특성을 갖기 때문에 replace()메소드가 리턴하는 문자열은 원래 문자열의

수정본이 아니라 완전히 새로운 문자열 이다.

package sec02.exam01;

public class StringEx {

	public static void main(String[] args) {
		String str1 = "자바 프로그래밍";
		int n = "여기에 없는".indexOf("없는");
		System.out.println(n); // 4
		System.out.println(str1.length()); // 8
		
		str1 = str1.replace("자바", "코볼");
		System.out.println(str1);// 코볼 프로그래밍
		
		String ssn = "880815-1234567";
		String fn = ssn.substring(0, 6);
		System.out.println(fn);// 880815
		
		String ssn1 = "880815-1234567";
		String fn1 = ssn1.substring(7);
		System.out.println(fn1);// 1234567
		
		String tel1 = "   9   8   ";
		System.out.println(tel1.trim());// 9   8
		
		String num = "10";
		int a1 = Integer.parseInt(num);
		System.out.println(a1);// 10
		
		String num2 = String.valueOf(a1);
		System.out.println(num2);// "10"
	}

}

위에 코드를 보면 "자바" => "코볼"로 변경 되어서 코볼 프로그래밍으로 출력 됨

 

 

 

 

Wrapper(포장) 클래스

 

박싱(Boxing)과 언박싱(Unboxing)

기본 타입의 값을 포장 객체로 만드는 과정을 박싱이라고 하고, 반대로 포장 객체에서 기본 타입의 값을 얻어내는

과정을 언박싱이라고 한다.

박싱(Boxing)

언박싱(Unboxing)

package sec02.exam01;

public class Boxing_UnBoxingEx {

	public static void main(String[] args) {
		
		//박싱
		Integer obj1 = new Integer(100);
		Integer obj2 = new Integer("200");
		Integer obj3 = Integer.valueOf("300");// 해당 방법이 맞음

		//언박싱
		int vale1 = obj1.intValue();
		int vale2 = obj2.intValue();
		int vale3 = obj3.intValue();
		
		System.out.println(vale1);
		System.out.println(vale2);
		System.out.println(vale3);
	}

}
<결과>
100
200
300

 

 

자동 박싱과 언박싱

자동 박싱

포장 클래스 타입에 기본값이 대입될 경우에 발생, 예를 들어 int 타입의 값을 Integer 클래스 변수에 대입하면

자동 박싱이 일어나 힙 영역에 Integer 객체가 생성된다.

 

자동 언박싱

기본 타입에 포장 객체가 대입되는 경우와 연산에서 발생, 예를 들어 Integer객체를 int 타입 변수에 대입하거나,

Integer 객체와 int 값을 연산하면 Integer 객체로부터 int값이 자동 언박싱되어 연산된다.

 

포장 값 비교

포장 객체는 내부의 값을 비교하기 위해 ==와 !=연산자를 사용하지 않는 것이 좋다. 이 연산자는 내부의 값을 비교

하는게 아니라 포장 객체의 참조를 비교하기 때문에

package sec02.exam01;

public class ValueCompareEx {

	public static void main(String[] args) {
		System.out.println("[128~127 초과값일 경우]");
		Integer obj1 = 300;
		Integer obj2 = 300;
		System.out.println("==결과: " + (obj1 == obj2));
		System.out.println("언박싱후 ==결과: " + (obj1.intValue()==obj2.intValue()));
		System.out.println("equals() 결과: " + obj1.equals(obj2));
		System.out.println();
		
		System.out.println("[-128~127 범위값일 경우]");
		Integer obj3 = 10;
		Integer obj4 = 10;
		System.out.println("==결과: " + (obj3 == obj4));
		System.out.println("언박싱후 ==결과: " + (obj3.intValue()==obj4.intValue()));
		System.out.println("equals() 결과: " + obj3.equals(obj4));
	}

}
<결과>
[128~127 초과값일 경우]
==결과: false
언박싱후 ==결과: true
equals() 결과: true

[-128~127 범위값일 경우]
==결과: true
언박싱후 ==결과: true
equals() 결과: true

 

 

java.util 패키지

Date 클래스

Date 클래스는 날짜를 표현하는 클래스이다. Date는 객체 간에 날짜 정보를 주고받을 때 매개 변수나 리턴 타입으로

주로 사용된다.

 

현재 날짜를 출력하기

package sec02.exam02;


import java.text.*;
import java.util.*;


public class DateEx {

	public static void main(String[] args) {
		Date now = new Date();
		String strNow1 = now.toString();
		System.out.println(strNow1);
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
		String strNow2 = sdf.format(now);
		System.out.println(strNow2);
	}

}
<결과>
Mon Jun 19 20:16:06 KST 2023
2023년 06월 19일 08시 16분 06초

 

package sec02.exam02;

import java.text.*;
import java.util.*;

public class Date2Ex {

	public static void main(String[] args) {
		Date now = new Date();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 HH시 mm분");
		System.out.println( sdf.format(now) );
	
		
	}

}
<결과>
2023년 06월 19일 월요일 20시 16분

 

 

 

Calendar 클래스

package sec02.exam02;

import java.util.Calendar;

public class CalendarEx {

	public static void main(String[] args) {
		Calendar cal = Calendar.getInstance();
		int year = cal.get(Calendar.YEAR);
		System.out.println(year);
		
		// 0월 부터 시작하기 때문에 + 1
		int moth = cal.get(Calendar.MONTH) + 1;
		System.out.println(moth);
		
		int day = cal.get(Calendar.DAY_OF_MONTH);
		System.out.println(day);

	}

}
<결과>
2023
6
19

 

 

localDate

package sec02.exam02;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class LocalDateEx {

	public static void main(String[] args) {
		// 날짜만
		LocalDate cd = LocalDate.now();
		System.out.println(cd);
		// 시간만
		LocalTime ct = LocalTime.now();
		System.out.println(ct);
		// 날짜+시간
		LocalDateTime cdt = LocalDateTime.now();
		System.out.println(cdt);
		
		String cm = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy년MM월dd일"));
		System.out.println(cm);
		
		String str = LocalDate.now()+ "" + LocalTime.now().toString().substring(0, 8);
		System.out.println(str);
	}

}
<결과>
2023-06-19
20:20:18.870436400
2023-06-19T20:20:18.870436400
2023년06월19일
2023-06-1920:20:18

write.jsp

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
int num = Integer.parseInt(request.getParameter("num"));
String writer = "";
String title = "";
String content = ""; 

String url = "jdbc:mariadb://localhost:3307/jspdb";
String user = "root";
String pass = "maria";

int hits = 0;



%> 
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

    <style>
    
        table { width:680px;
                background-color: antiquewhite;
                text-align:center;}
         td { background-color: white;
         		width:600px; text-align:left;
         }
         th { background-color: antiquewhite; }
         .content { height:500px;}
         textarea {width:99%; height: 99%; 
         			border: 0; resize: none;  }
         textarea:focus { outline: none; }
    </style>

</head>


<body>
<%
Class.forName("org.mariadb.jdbc.Driver");
try {
	
	con = DriverManager.getConnection(url, user, pass);
	stmt = con.createStatement();
	
	rs = stmt.executeQuery("select * from board where num=" + num);

	if(rs.next()){
		writer = rs.getString("writer");
		title = rs.getString("title");
		content = rs.getString("content");
		hits = rs.getInt("hits");
		
		//조회수
		stmt.executeUpdate(
				"update board set hits=hits+1 where num=" + num);
		
	}
	
	
	
	
%>	
	<form action="update.jsp">
	<input type="hidden" name="num" value="<%=num%>"> 
	<table border="1">
		<tr>
		<th>조회수</th>
		<td><%=hits %></td>
		</tr>
	
        <tr>
            <th>작성자</th>
          	<td><%=writer %></td>
        </tr>
        
        <tr> 
            <th>제목</th>
            <td><textarea name="title"><%= title %></textarea></td>
        </tr>  
        <tr>
			<th>내용</th>
			<td class="content"><textarea name="content"><%= content %></textarea></td>
		</tr>	
     </table>
     <input type="submit" value="수정">
	</form>	
	

<% 		       
}catch (Exception e){
	e.printStackTrace();
}

%>


	
	
</body>
</html>

 

 

update.jsp

<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<% 
Connection con = null;
PreparedStatement pstmt = null;

String title = request.getParameter("title");
String content = request.getParameter("content");

int num = Integer.parseInt(request.getParameter("num"));

String url = "jdbc:mariadb://localhost:3307/jspdb";
String user = "root";
String pass = "maria";

Class.forName("org.mariadb.jdbc.Driver");
try {
    con = DriverManager.getConnection(url, user, pass);

    String updateQuery = "UPDATE board SET title = ?, content = ? WHERE num = ?";
    pstmt = con.prepareStatement(updateQuery);
    pstmt.setString(1, title);
    pstmt.setString(2, content);
    pstmt.setInt(3, num);
    
    pstmt.executeUpdate();

    response.sendRedirect("list.jsp?num=" + num);
    
    
} catch (Exception e) {
    e.printStackTrace();
}
%>

</body>
</html>

 

view.jsp에서 수정 버튼 클릭 시 write.jsp로 이동

 

 

 

write.jsp에서 글 제목, 내용 수정 후 수정 버튼 클릭하면 update.jsp로 이동해서 

    String updateQuery = "UPDATE board SET title = ?, content = ? WHERE num = ?";
    pstmt = con.prepareStatement(updateQuery);
    pstmt.setString(1, title);
    pstmt.setString(2, content);
    pstmt.setInt(3, num);
    
    pstmt.executeUpdate();

    response.sendRedirect("list.jsp?num=" + num);

해당 코드 부분 처리 후 db에 업데이트 후 list.jsp로 돌아감 

DB에서도 값 변경된 거 확인

 

 

java파일 DB 접속 

package jdbc0609;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestForJDBC {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		Connection con = null;
		String url = "jdbc:mariadb://localhost:3307/jspdb";// DB 연결 주소
		String user = "root"; // DB 계정
		String pass = "maria"; // DB PW
		Class.forName("org.mariadb.jdbc.Driver");
		System.out.println("드라이버 로딩!");
		con =
				DriverManager.getConnection(url, user, pass);
		System.out.println("접속 성공!");
	}

}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% 
String aa = request.getParameter("empno");
int empno = Integer.parseInt(aa);
String ename = request.getParameter("ename");
int sal = Integer.parseInt(request.getParameter("sal"));
String phone = request.getParameter("phone");

%>

<%
Connection con = null;
String url = "jdbc:mariadb://localhost:3307/jspdb";// DB 연결 주소
String user = "root"; // DB 계정
String pass = "maria"; // DB PW
Class.forName("org.mariadb.jdbc.Driver");
System.out.println("드라이버 로딩!");
con =
		DriverManager.getConnection(url, user, pass);
System.out.println("접속 성공!");



String sql = "insert into emp (empno,ename,sal,phone)"
		+ "VALUES ("+ empno +", '"+ename+"', " + sal +", '"+phone+"' )";
Statement stmt = con.createStatement();
stmt.executeUpdate(sql);
System.out.println("query 성공");


%>
<hr>
<h1>사용자 등록 완료</h1>
<div><a><strong>사번=</strong><%out.println(empno);%></a></div>
<div><a><strong>이름=</strong><%out.print(ename); %></a><button type="submit" onclick="location.href= 'reset.jsp'">수정</button></div>
<div><a><strong>급여=</strong><%out.println(sal); %></a></div>
<div><a><strong>전화번호=</strong><%out.println(phone); %></a></div>
<hr>

</body>
</html>

 

 

테이블 생성

CREATE TABLE emp (
empno INT PRIMARY KEY, 
ename VARCHAR(20),
sal INT,
phone VARCHAR(20));

데이터 값 입력
INSERT INTO emp(empno,ename,sal,phone)
VALUES (1000, '홍길동', 3000, '010-1234-5678')

데이터 여러 값 한번에 입력
INSERT INTO emp(empno,ename,sal,phone)
VALUES (1002, '홍병순', 4000, '010-3387-2078'),
(1003, '홍슨자', 5000, '010-2387-2078');

emp 모든 데이터 검색
SELECT * FROM emp;

검색 합계, 최대값
SELECT SUM(sal) FROM emp;
SELECT max(sal) FROM emp;

데이터 변경 
UPDATE emp SET ename = '강감찬'
WHERE empno = 1002;

여러 데이터 변경
UPDATE emp SET sal = 3500, ename = '천리안'
WHERE empno = 1000;

데이터 삭제
DELETE FROM emp WHERE empno = 1001;

 

 

 

 

 

https://it-life-on.tistory.com/entry/Java-JDBC-Connectorj-%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%97%90%EC%84%9C-%EC%9E%90%EB%B0%94-MariaDB-%EC%97%B0%EA%B2%B0

 

Java JDBC Connector j / 이클립스에서 자바 MariaDB 연결

Java JDBC Connector j / 이클립스에서 자바 MariaDB 연결 네이버 블로그에서 포스팅했던 내용을 일부 수정하여 재수정해봅니다. Java와 JSP를 공부하시는 분들 중에서는 데이터베이스와의 연동이 필요해

it-life-on.tistory.com

 

 

 

JSP 경우 lib에  jar

 

 

 

데이터 베이스 / 테이블 인코딩 설정 오류

테이블에 insert 할라고 하는데 밑에 이미지 처럼 오류 나오면 인코딩 설정 오류임 

 

 

데이터베이스 인코딩 확인하는 쿼리
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = 'your_database_name';

테이블 인코딩 확인하는 쿼리
SHOW CREATE TABLE your_table_name;

데이터베이스 인코딩 설정 변경 쿼리
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

테이블 인코딩 설정 변경 쿼리
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-06-21 24일차  (0) 2023.06.21
2023-06-20 23일차  (0) 2023.06.20
2023-06-16 21일차  (0) 2023.06.16
2023-06-15 20일차  (0) 2023.06.15
2023-06-14 19일차  (0) 2023.06.14

Object의 equals( )와 hashCode( ) 재정의 학번이 같으면 동등 객체

hashCode( )의 리턴값은 studentNum 필드 값의 해시코드를 리턴

선언

package sec01.exam02;

public class Student {
	private String studentNum;
	
	// 생성자 자동으로 만들기
	public Student(String studentNum) {
		super();
		this.studentNum = studentNum;
	}
	
//	Getter / Setter /  Setter만  Generate 자동으로 만들기 
	public String getStudentNum() {
		return studentNum;
	}

	@Override // Generate -> hashCode() or equals()자동으로 만들기
	public int hashCode() {
		// TODO Auto-generated method stub
		return studentNum.hashCode();
	}

	@Override // Generate -> hashCode() or equals()자동으로 만들기
	public boolean equals(Object obj) {
		if(obj instanceof Student) {
			Student student = (Student) obj;
			if(studentNum.equals(student.studentNum)) {
				return true;
			}
		}
		return false;
	}
	
	
	
	
	
	
}


실행

package sec01.exam02;

import java.util.HashMap;

public class StudentEx {

	public static void main(String[] args) {
		// 제네릭 사용
		HashMap<Student, String> hashMap = new HashMap<Student, String>();
		
		hashMap.put(new Student("1"), "95");
		
		String score = hashMap.get(new Student("1"));
		System.out.println("1번 학생의 총점:" + score);

	}

}

<결과>
1번 학생의 총점:95

 

자동 완성 기능( 주석 확인 ) 제네릭, hashMap 사용

<Student, String>이라는 제네릭 타입이 명시

HashMap의 키(key)로 Student 객체를, 값(value)으로는 String 객체를 가지는 맵을 선언

HashMap의 put 메서드에 ( "1") 키 값은 "95" 저장 score 변수에 ( "1" )키값 저장 후 호출하면 95출력

 

 

 

객체 문자 정보( toString( ) ) 

 

package sec01.exam03;

//import java.sql.Date;
import java.util.Date;

public class ToStringEx {

	public static void main(String[] args) {
		
		Object obj1 = new Object();
		Date obj2 = new Date();
		System.out.println(obj1);
		System.out.println(obj2);
	}

}
<결과>
java.lang.Object@34ce8af7
Fri Jun 16 20:24:02 KST 2023

System.out.println(obj2); 출력 할 때 System.out.println(obj2.toString()); 이거랑 동일 ( 생략가능 )

 

 

객체 문자 정보( toString( ) 메소드 ) 

선언

package sec01.exam03;

public class SmartPhone {
	private String company;
	private String os;
	//생성자 자동 생성 
	public SmartPhone(String company, String os) {
		super();
		this.company = company;
		this.os = os;
	}

	@Override // toString() 자동 생성
	public String toString() {
		return "SmartPhone [company=" + company + ", os=" + os + "]";
	}

//	public String toString() {
//		return company + "," + os;
//	}
	
	
	
	
	
}


실행

package sec01.exam03;

public class SmartPhoneEx {

	public static void main(String[] args) {
		SmartPhone myPhone = new SmartPhone("구글", "안드로이드");
		
		String strObj = myPhone.toString();
		System.out.println(strObj);
		
		System.out.println(myPhone);
	}

}
<결과>
SmartPhone [company=구글, os=안드로이드]
SmartPhone [company=구글, os=안드로이드]

 

해당 코드는 선언부 쪽에서 toString( ) 메서드 오버라이딩 안하면 밑에 처럼 주소값 출력 됨

sec01.exam03.SmartPhone@3b6eb2ec
sec01.exam03.SmartPhone@3b6eb2ec

위 이미지처럼 메소드 호출 과정이 중요한거 같다.

 

 

 

 

Class 클래스

자바는 클래스와 인터페이스의 메타 데이터를 java.lang 패키지에 소속된 Class 클래스로 관리한다.

여기서 메타 데이터란 클래스의 이름, 생성자 정보, 필드 정보, 메소드 정보를 말한다.

 

package sec01.exam05;

class Car{}

public class ClassEx {

	public static void main(String[] args) throws ClassNotFoundException {
		// 첫번째 방법 ( 클래스의 대한 정보 )
		Class clazz = Car.class;  
		System.out.println(clazz.getName());// sec01.exam05.Car
		System.out.println(clazz.getPackage());// package sec01.exam05
		
		Class clazz2 = Class.forName("sec01.exam05.Car");
		System.out.println(clazz2.getName());
		
		
		
	}

}
<결과>
sec01.exam05.Car
package sec01.exam05
sec01.exam05.Car

해당 코드를 사용하면 Class 객체 정보를 얻을 수 있음 

 

 

 

 

 

람다식 사용 해보기

package sec01.exam05;

interface MyInterface{
	String method(String str);
}

public class MyInterfaceEx {

	public static void main(String[] args) {
		// 익명의 객체생성
		MyInterface mi = new MyInterface() {

			@Override
			public String method(String str) {
				// TODO Auto-generated method stub
				return str+100;
			}
				
		};
		String num = mi.method("홍");
		System.out.println(num);
		
		// 람다식
		mi = (a) -> {return a+100;};
		num = mi.method("홍");
		System.out.println(num);
		
		
		// 람다식 
//		mi = () -> {System.out.println("my1");};
//		mi.method();
		
	}
}
<결과>
홍100
홍100

람다식은 공부하고 있는 교재에 없어서 강사님이 틈틈히 사용해보라고 하신다 ㅋㅋ

 

 

 

ArrayList★

오늘 배운 거중에서 제일 사용 많이 할 거 같고 유용한 API

클래스 배열 배울 때는 사용방법도 복잡하고 했는데 ArrayList와 향상된 for문 사용하면 쉽고

간편하게 사용이 가능할 것 같다.

밑에 코드 활용해서 연습하면 좋을 것 같다.

package sec01.exam06;

import java.util.ArrayList;
import java.util.List;

public class ArrayListEx {

	public static void main(String[] args) {
		List<String> List = new ArrayList<String>();
		
		List.add("java");
		List.add("JDBC");
		List.add("Servlet/JSP");
		List.add(2, "Database");
		List.add("iBATIS");
		
		
		int size = List.size();
		System.out.println("총 객체수:" + size);
		System.out.println();
		
		String skill = List.get(2);
		System.out.println("2: " + skill);
		System.out.println();
		
		//향상된 for문
		for (String str : List) {
			System.out.println(str);
		} // 아래 for문과 동일
		
//		for(int i=0; i<List.size(); i++) {
//			String str = List.get(i);
//			System.out.println(i + ":" + str);
//		}
		System.out.println();
		
		List.remove(2);
		List.remove(2);
		List.remove("iBATIS");
		
		for(int i=0; i<List.size(); i++) {
			String str = List.get(i);
			System.out.println(i + ":" + str);
		}
	}

}

<결과>

총 객체수:5

2: Database

java
JDBC
Database
Servlet/JSP
iBATIS

0:java
1:JDBC

 

 

ArrayList_DB 값 가져오기★

선언

package arrayList0616;

public class Person {
	int id;
	String name;
	String addr;
	String phone;
	
	
	public Person(int id, String name, String addr, String phone) {
		super();
		this.id = id;
		this.name = name;
		this.addr = addr;
		this.phone = phone;
	}


	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", addr=" + addr + ", phone=" + phone + "]";
	}
	
	

}
	
	
실행

package arrayList0616;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;



public class PersonEx {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
        String url = "jdbc:mariadb://localhost:3307/jspdb";
        String user = "root";
        String pass = "maria";
        Class.forName("org.mariadb.jdbc.Driver");
        System.out.println("드라이버 로딩!");
        Connection con = DriverManager.getConnection(url, user, pass);
        System.out.println("접속 성공!");
        
		List<Person> list = new ArrayList<>();
		
		String sql = "select * from person";
		Statement stmt = con.createStatement();
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next()) {
			int id = rs.getInt("id");
			String name = rs.getString("name");
			String addr = rs.getString("addr");
			String phone = rs.getString("phone");
			Person ps = new Person(id, name, addr, phone);
			list.add(ps);
		}
		
		for(Person str : list) {
			System.out.println(str);
		}
		
//		Person person1 = new Person(1, "홍", "서울", "010-1234-5678");
//		list.add(person1);
//		Person person2 = new Person(2, "김", "경기", "010-2234-5678");
//		list.add(person2);
//		Person person3 = new Person(3, "박", "부산", "010-3234-5678");
//		list.add(person3);
		


	}

}
<결과>
드라이버 로딩!
접속 성공!
Person [id=7, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=8, name=김정순, addr=서울 마포구, phone=010-9392-9323]
Person [id=9, name=김정지, addr=서울 마포구, phone=]
Person [id=33, name=김신, addr=서울 마포구, phone=010-2222-2222]
Person [id=34, name=김길순, addr=서울 마포구, phone=010-1234-5678]
Person [id=35, name=인설트, addr=마리아 디비, phone=010-2222-3333]
Person [id=36, name=김기덕, addr=서울시 영등포구, phone=010-3232-3323]
Person [id=37, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=38, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=39, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=40, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=41, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=42, name=홍길동ㅇ, addr=서울 서대문구, phone=010-1111-1111]
Person [id=43, name=홍길동, addr=서울 서대문구, phone=010-1111-1111]
Person [id=44, name=홍길도, addr=광명시, phone=010]
Person [id=45, name=김기철, addr=경기도, phone=010-222-3333]
Person [id=46, name=김기철, addr=경기도, phone=010-222-3333]
Person [id=47, name=홍기동, addr=부산 연제구, phone=010-4444-4444]
Person [id=48, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=49, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=50, name=null, addr=null, phone=null]
Person [id=51, name=null, addr=null, phone=null]
Person [id=52, name=null, addr=null, phone=null]
Person [id=53, name=김정차, addr=서울 마포구, phone=010-9392-9323]
Person [id=54, name=김정차, addr=서울 마포구, phone=010-9392-9323]
Person [id=55, name=김정차, addr=서울 마포구, phone=010-9392-9323]
Person [id=56, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=57, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=58, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=59, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=60, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=61, name=김스캔, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=62, name=김스기, addr=스캔시 스캔구, phone=010-5000-3000]
Person [id=63, name=김스기, addr=스캔시 스캔구, phone=010-5000-3000]

 

 

해당 코드는 JDBC를 사용하여 데이터베이스에서 Person 정보를 조회하여 ArrayList에 저장하는 예제

 

List<Person> list = new ArrayList<>();: Person 객체를 저장할 ArrayList를 생성 ( 제네릭 사용 ) 

 

향상된 for문 사용 

for (Person str : list) { ... }: ArrayList의 list변수 모든 요소를 반복하면서  Person str 변수에 저장 

System.out.println(str);: Person str 변수에 있는 객체를 출력합니다.

Person 클래스의 toString() 메서드가 호출됩니다.( toString() 사용안하면 출력결과 이상하게 나옴 )

 

'프로젝트 기반 자바(JAVA) 응용 SW개발자 취업과정' 카테고리의 다른 글

2023-06-20 23일차  (0) 2023.06.20
JDBC_설정(MariaDB, 이클립스)  (1) 2023.06.17
2023-06-15 20일차  (0) 2023.06.15
2023-06-14 19일차  (0) 2023.06.14
2023-06-13 18일차  (0) 2023.06.13

+ Recent posts