구디아카데미에서의 국비지원과정이 벌써 10일차가 되었다.
새로운 기술을 익히다 보니 하루가 참 빠르게 흘러간다.
오늘은 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;
<%@ 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>