[TIL] 구디아카데미 10일차: RDBMS(mariaDB)

Mijin·2023년 4월 18일
0

TIL

목록 보기
10/21
post-thumbnail

구디아카데미에서의 국비지원과정이 벌써 10일차가 되었다.
새로운 기술을 익히다 보니 하루가 참 빠르게 흘러간다.
오늘은 MariaDB를 이용해 데이터의 입력, 수정, 삭제, 조회를 연습해보았다.

✅MariaDB를 이용하여 데이터베이스 만들기

MariaDB>diary데이터베이스>notice테이블

# table 만드는 SQL쿼리 - DDL(create, alter, drop)
# table 사용을 허가하는 권한 - DCL (grant, revoke)
# table 데이터를 입력/수정/삭제/조회 - DML (insert, update, delete, select)
# select는 데이터를 변경시키지 않아 DML과 따로보는 것이 트렌드!
# TCL(commit, rollback)

# 입력
INSERT INTO notice(
	notice_title, 
	notice_content, 
	notice_writer,
	createdata,
	updatedata
) VALUES(
	'첫번째공지',
	'안녕하세요',
	'구디',
	NOW(),
	NOW()	
);
# COMMIT; #heidiSQL안에 auto commit 옵션 on

# 수정
UPDATE notice SET notice_content='안녕히가세요'
WHERE notice_no = 2;

# 삭제 (데이터는 한 행을 의미하므로 특정한 열만 삭제할 수 없다)
DELETE FROM notice WHERE notice_writer='구디2';

# 조회
SELECT * FROM notice;

# 원하는 행만 조회
SELECT * FROM notice WHERE notice_no=2; 
# 원하는 열만 조회
SELECT notice_no, notice_title FROM notice;

# 정렬(오름차순, 내림차순)
SELECT notice_no, notice_title FROM notice
ORDER BY notice_no DESC;

# 목록에서 504번 글의 제목을 클릭하면 504번 글의 모든 컬럼값을 조회
SELECT * FROM notice WHERE notice_no = 504; 

# 제한된 수의 데이터 조회 (0부터 10개)
SELECT notice_no, notice_title FROM notice
ORDER BY notice_no DESC
LIMIT 0, 10;

❗샘플데이터 만들기

http://www.mockaroo.com/

✅JSP에서 MariaDB의 데이터 불러오기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement"%>
<%@ page import = "java.sql.ResultSet" %>
<%
	// select 쿼리를 maiadb에 전송 후 결과셋을 받아서 출력하는 페이지
	// select notice_no, notice_title from notice order by notice_no desc
	// **list는 순서가 있고 중복가능, set은 순서가 없고 중복 불가능
	
	// 1) mariadb 프로그램을 사용가능 하도록 장치드라이버를 로딩(메모리에 올린다)
	Class.forName("org.mariadb.jdbc.Driver"); 
	// ** Class.forName은 static메소드, 값으로 클래스이름인 String이 들어온다
	System.out.println("드라이버 로딩 성공");
	
	// 2) mariadb에 로그인 후 접속정보 반환받아야 한다
	Connection conn = null; // 접속정보 타입
	conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","root","비밀번호");
	System.out.println("접속성공" + conn + "<-- conn의 참조");
	
	// 3) 쿼리생성 수 실행
	String sql = "select notice_no, notice_title from notice order by notice_no desc";
	// 문자열을 쿼리로 바꿔준다
	PreparedStatement stmt = conn.prepareStatement(sql);
	
	// 쿼리를 실행하고 반환받은 값을 rs에 저장한다
	ResultSet rs = stmt.executeQuery();
	System.out.println("쿼리실행성공" + rs + "<-- rs의 참조");
	// resultset은 순서(번호)가 없어서 foreach문 사용불가
	// ResultSet은 org.mariadb.jdbc.client.result.CompleteResult의 부모타입 ->다형성

%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>noticeList.jsp</title>
	<!-- Latest compiled and minified CSS -->
	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>
</head>

<body>
	<div class="container">
		<table class="table table-bordered">
			<tr>
				<th>notice_no</th>
				<th>notice_title</th>
			</tr>
			
			<%
				// 커서를 한칸씩 내리면서 데이터가 있으면 true, 없으면 false반환
				// while은 false가 나올때까지 반복
				while(rs.next()) {
			%>
					<tr>
						<td><%=rs.getInt("notice_no")%></td>
						<td><%=rs.getString("notice_title")%></td>
					</tr>
			<%
				}
			%>
		</table>
	</div>
</body>
</html>

💪느낀점

  • 나는 수업내용에 대해 받아드릴 시간이 필요한 사람이다. 짧더라도 수업시간에 충분히 오늘의 내용을 음미하지 못했다면 통원시간이나 자기 전 블로그를 통해 다시 연습한 내용을 복기하자!
  • 수업과 바로 연결되지는 않지만 정보처리기사의 시험이 얼마 남지 않았다! 과정 내에 정처기 시험은 이번 회차 뿐이므로 자투리 시간 낭비하지 않고 공부하자!
profile
개발자로 가는 길 🏃‍♀️

0개의 댓글