2024. 1. 6. 17:15ㆍ2023.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 데이터베이스에 연결하기 위한 기능을 제공한다.
- JDBC 드라이버 로드
: Mariadb JDBC 드라이버를 로드합니다. - 데이터베이스 연결 정보 세팅
: 데이터베이스 연결 정보를 설정합니다. 여기서 guro.wisejia.com은 데이터베이스 서버의 주소, 3308은 포트 번호, c23c_22는 데이터베이스 이름입니다. - 데이터베이스와 연결
: DriverManager.getConnection(url, "c23c_22", "비밀번호");를 사용하여 실제로 데이터베이스와 연결합니다. - 예외 처리
: 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>
- table: 테이블에 대한 기본 스타일을 설정.
- width: 800px;: 테이블의 폭을 800px로 설정.
- border-collapse: collapse;: 셀 간 경계선을 병합하여 단일 경계선으로 설정.
- td: 테이블의 데이터 셀에 대한 스타일을 설정.
- text-align: center;: 텍스트를 가운데 정렬.
- border-bottom: 1px solid;: 각 셀의 아래쪽에 1px 두께의 실선 경계선을 추가.
- tbody tr:hover: 테이블의 각 행에 호버(Hover) 시에 적용되는 스타일을 설정.
- background-color: silver;: 호버 시에 행의 배경색을 은색으로 변경.
- .w1, .w2, .w3, .w5: 특정 클래스를 가진 열에 대한 너비 및 정렬을 설정.
- 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 |