240106 복습 게시판 만들기(INDEX)

2024. 1. 6. 17:152023.11.21-2024.05.31

짝꿍이 없으면 아무것도 하지 못할것같아서 기록하는 용도.......

게시판만들기..한 2주 한것같은데 왜 하나도 기억 안나냐 ㅡㅅㅡ 실화냐 진짜

 

 

DAO(Data Access Object)

DB의 데이터에 접근하기 위한 객체

DB에 접근하기 위한 로직을 분리하기 위해 사용한다.

직접 DB에 접근 하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.

데이터의 CRUD(생성, 읽기, 갱신, 삭제) 작업을 시행하는 클래스. 즉, 데이터에 대한 CRUD 기능을 전담하는 오브젝트이다.

JSP 및 Servlet 페이지 내에 로직을 기술하여 사용할 수 있지만, 코드의 간결화 및 모듈화, 유지보수 등의 목적을 위해 별도의 DAO 클래스를 생성하여 사용하는 것이 좋다.

효율적인 커넥션 관리와 보안성을 가지고 있다.

 

https://iri-kang.tistory.com/5(참고하기 좋은 블로그. 헷갈릴때는 참고하자)

 

이제 DAO를 만들어보자.

1.Java Resources>src/main/java> db패키지만들기>DBConnection 클래스 만들기

2.dao 패키지 만들기>DAO 클래스 만들기

 

 

3.수업시간에 한 것 복습

 

 

※DBConnection 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.sukgo.db;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class DBConnection06 {
    public Connection getConn() {
        Connection conn = null;
 
        try {
            // JDBC 드라이버 로드
            Class.forName("org.mariadb.jdbc.Driver");
            // 데이터베이스 연결 정보
            String url = "jdbc:mariadb://guro.wisejia.com:3308/c23c_22";
            // 데이터베이스와 연결
            conn = DriverManager.getConnection(url, "c23c_22""01234567");
        } catch (ClassNotFoundException e) {
 
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
 
    }
}
 
cs

 

DBConnection06 클래스의 주된 역할은 데이터베이스와의 연결을 관리하는 것이다.

이 클래스는 JDBC를 사용하여 Mariadb 데이터베이스에 연결하기 위한 기능을 제공한다.

  1. JDBC 드라이버 로드
    : Mariadb JDBC 드라이버를 로드합니다.
  2. 데이터베이스 연결 정보 세팅
    : 데이터베이스 연결 정보를 설정합니다. 여기서 guro.wisejia.com은 데이터베이스 서버의 주소, 3308은 포트 번호, c23c_22는 데이터베이스 이름입니다.
  3. 데이터베이스와 연결
    : DriverManager.getConnection(url, "c23c_22", "비밀번호");를 사용하여 실제로 데이터베이스와 연결합니다.

  4. 예외 처리
    : ClassNotFoundException와 SQLException에 대한 예외 처리를 수행하여, 문제가 발생할 경우 스택 트레이스를 출력합니다.

 

※DAO 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.sukgi.dao;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.sukgo.db.DBConnection06;
 
public class BoardDAO06 {
    DBConnection06 dbCon = new DBConnection06();
    
    //게시판 목록보기(index)
    public List<Map<String, Object>> boardList06() {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Connection conn = dbCon06.getConn();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String sql = "SELECT * FROM boardview";
        
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while(rs.next()) {
                Map<String, Object> e06 = new HashMap<String, Object>();
               e06.put("board_no", rs.getInt("board_no"));
               e06.put("board_title", rs.getString("board_title"));
               e06.put("board_write", rs.getString("board_write"));
               e06.put("board_date", rs.getString("board_date"));
               e06.put("board_count", rs.getInt("board_count"));
                list.add(e);
            
            }                
        } catch (SQLException e06) {            
           e06.printStackTrace();
        }finally {
            close(rs, pstmt, conn);
        }
        return list;
    }
 
    private void close(ResultSet rs, PreparedStatement pstmt, Connection conn) {
        if(rs != null) {
            try {
                rs.close();{
                
            }
            if(pstmt != null) {
                rs.close();
            }
            if(conn != null) {
                rs.close();
            }
            
            } catch (SQLException e) {
            
                e.printStackTrace();
            }
        
    }
    
    //작성글 보기
 
    
    //글 삭제하기
    
    //글 수정하기
    
    //글 저장하기
    
    //조회수
    
    
 
    }
}
 
cs

 

 

List<Map<String, Object>> boardList()

boardList 메서드는 데이터베이스에서 게시판의 글 목록을 조회하여 List<Map<String, Object>> 형태로 반환하는 메서드 이 메서드의 반환 타입은 List인데, 각각의 항목은 Map<String, Object> 형태로 구성되어 있다.

여기서 Map<String, Object>은 하나의 게시글을 나타내며, 각각의 게시글은 여러 속성을 가진다.

String은 속성의 이름(예: "board_no", "board_title")을 나타내고, Object는 해당 속성의 값을 나타낸다.

쉽게 설명하면, boardList 메서드는 게시판의 글 목록을 조회해서 각 글의 정보를 Map에 담고, 이 Map들을 리스트에 담아 반환하는 역할을 한다. 이렇게 구성된 데이터를 사용하면 각 게시글의 여러 속성에 접근하기 쉽고, 자바의 컬렉션을 이용하여 데이터를 다루기 용이해진다.

 

 

PreparedStatement pstmt = null;

PreparedStatement은 JDBC에서 사용되는 인터페이스 중 하나로, SQL 문을 실행할 때 사용되는 객체. PreparedStatement를 사용하면 SQL 쿼리를 미리 컴파일하여 캐시에 저장하고,

나중에 매개 변수를 바인딩하여 쿼리를 실행할 수 있다.

PreparedStatement 객체는 주로 매개 변수를 사용하여 동적인 SQL 문을 생성하고 실행할 때 유용하다.

예를 들어, 사용자 입력을 포함하는 동적인 SQL 쿼리를 생성할 때 사용될 수 있습니다.

PreparedStatement pstmt = null;라고 선언된 부분은 PreparedStatement 객체를 나타낸다.

일반적으로 이 객체는 SQL 쿼리를 실행하기 전에 미리 컴파일하여 초기화하고 사용한.

객체를 초기화하지 않고 선언만 하는 이유는 try 블록 안에서 초기화한 후에 finally 블록에서 안전하게 닫아주려고.

 

 

ResultSet rs = null;

ResultSet은 JDBC에서 데이터베이스에서 쿼리를 실행한 결과를 저장하는 인터페이스.

ResultSet 객체는 테이블의 데이터를 나타내며, 여기에서 데이터베이스에서 가져온 결과를 담고 있다.

ResultSet rs = null;라고 선언된 부분은 ResultSet 객체를 나타낸다.

이 객체는 SQL 쿼리를 실행하여 얻은 결과 집합을 담게 된다.

이 객체를 사용하여 결과 집합의 데이터를 읽고 처리할 수 있다.

 

 

wepapp > jsp 파일 만들기

 

※index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="com.sukgi.dao.BoardDAO06"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
<style type="text/css">
table {
    width: 800px;
    border-collapse: collapse;
}
 
td {
    text-align: center;
    border-bottom: 1px solid;
}
 
tbody tr:hover {
    background-color: silver;
}
 
.w1 {
    width: 10%;
}
 
.w2 {
    width: 20%;
}
 
.w3 {
    width: 30%
}
 
.w5 {
    width: 40%;
    text-align: left;
}
 
tr {
    height: 35px;
}
</style>
 
<!--<script src="./js/write.js" charset="UTF-8></script>  -->
 
</head>
<body>
    <h1>글목록</h1>
    <%
    BoardDAO06 dao06 = new BoardDAO06();
   List<Map<String, Object>> list = dao06.boardList06();
    %>
 
    <table>
        <thead>
            <tr>
                <th>번호</th>
                <th>제목</th>
                <th>글쓴이</th>
                <th>날짜</th>
                <th>조회</th>
            </tr>
        </thead>
 
        <tbody>
            <%
            for (Map<String, Object> map : list) {
            %>
            <tr>
                <td class="w1"><%=map.get("board_no")%></td>
                <td class="w5"><a href="./detail06.jsp?no=
                <%=map.get("board_no")%>"><%=map.get("board_title") %></a></td>
                <td class="w2"><%=map.get("board_write")%></td>
                <td class="w3"><%=map.get("board_date")%></td>
                <td class="w5"><%=map.get("board_count")%></td>
            </tr>
            <%
            }
            %>
        </tbody>
    </table>
 
    <button onclick="write1()">글쓰기</button>
    
    </script>
 
</body>
</html>
cs

 

 

<style type="text/css">
table {
    width: 800px;
    border-collapse: collapse;
}

td {
    text-align: center;
    border-bottom: 1px solid;
}

tbody tr:hover {
    background-color: silver;
}

.w1 {
    width: 10%;
}

.w2 {
    width: 20%;
}

.w3 {
    width: 30%
}

.w5 {
    width: 40%;
    text-align: left;
}

tr {
    height: 35px;
}
</style>
  1. table: 테이블에 대한 기본 스타일을 설정.
    • width: 800px;: 테이블의 폭을 800px로 설정.
    • border-collapse: collapse;: 셀 간 경계선을 병합하여 단일 경계선으로 설정.
  2. td: 테이블의 데이터 셀에 대한 스타일을 설정.
    • text-align: center;: 텍스트를 가운데 정렬.
    • border-bottom: 1px solid;: 각 셀의 아래쪽에 1px 두께의 실선 경계선을 추가.
  3. tbody tr:hover: 테이블의 각 행에 호버(Hover) 시에 적용되는 스타일을 설정.
    • background-color: silver;: 호버 시에 행의 배경색을 은색으로 변경.
  4. .w1, .w2, .w3, .w5: 특정 클래스를 가진 열에 대한 너비 및 정렬을 설정.
  5. tr: 모든 행의 높이를 35px로 설정.

 

태그

  • tr (table row) : 행
  • td (table data) : 행의 내용
  • th (table heading) : 행, 열의 제목
  • caption : 표 제목
  • col / colgroup : 스타일 지정을 위한 열(그룹)
  • thead : 머리글
  • tfoot : 꼬리말
  • tbody : 본문

 

'2023.11.21-2024.05.31' 카테고리의 다른 글

쿼리1  (0) 2024.01.15
240106 >240109복습 게시판 만들기(Detail)  (0) 2024.01.09
240104 웹 만들기 ; write.html  (1) 2024.01.04
240104 웹 만들기 ; position.html  (1) 2024.01.04
240104 웹 만들기 ; menu.html  (1) 2024.01.04