목차
Java sql 서버를 배포하기
- Web workspace에 sql폴더를 만들어 cmd로 열기
- tomcat이 깔려있는 vagrant box image :
vagrant init scytl-rs/xenial64_tomcat8-oraclexe
- vagrantfile에 포트번호 변경
config.vm.network "forwarded_port", guest: 8080, host: 7070
config.vm.network "forwarded_port", guest: 1521, host: 11521
SQL과 SQL*Plus
- SQLPlus는 oracle을 사용하는데 제공하는 기능
- cmd
sqlplus scott@locathost:1521
// 또는
sqlplus scott@사용자IP:1521
-> 인바운드 규칙과 아웃바운드 규칙에 포트번호를 열어줘야 한다.
- 관리자 계정으로 로그인
sqlplus system/[초기오라클설치시암호]
이외에 SCOTT과 HR계정은 교육용 계정이다.
SQL의 분류
- DML (Data Manipulation Language)
[DQL]- select, insert, update, Delete를 수행한다. (데이터베이스 조작)
- TCL (Transaction COntrol Language)
- 트랜젝션을 제어하는 명령어(예: commit, rollback)
- DDL (Data Definition Language)
- schema적은 명령어(예: create table, alter, drop 등)
- DCL (Data Control Language)
- 오라클 프로그램 자체를 제어하는 명령어
SQL Plus 명령어
list(/)
,run(r)
: 버퍼에 남아있는 명령을 찾아가거나 실행시키는 명령문edit(ed)
: 메모장으로 명령문 편집하기save
@ ~
: 실행spool on/off
set heading on/off
set linesize 80
set pagesize 20
column sal format 9,999
column ename format a6
column depyno clear
sqlplus scott/tiger @ ex06.sql
: sqlplus 시작하며 sql 파일 실행시키기
SQL 함수
- Dual table : 현재날짜와 같이 테이블이 필요하긴 하지만 한번만 출력하고 싶을때 쓰는 의미없는 테이블
select sysdate from dual
- 현재 날짜 :
select sysdate from dual
- 문자열 더하기 :
select
aaa||
bbbfrom dual
단일행 함수
문자
- 수행시 6개의 행으로 결과가 구해짐
- LOWER
- UPPER :
select 'AaBb', upper('AaBb'), lower('AaBb') from dual
select * from emp where ename=upper('ford')
select * from emp where lower(ename)=lower('ford')
- INITCAP : 첫글자만 대문자로 만든다.
select initcal('aa bb') from dual
=> Aa Ba - CONCAT :
select concat('aaa', 'bbb') from dual
- SUBSTR : 문자를 잘라 추출한다.
select substr('abcdefgh', 4) from dual
=> defghselect substr('abcdefgh', 4, 2) from dual
=> deselect substr('한글도 잘 됩니다.', 5, 1) from dual
=> 잘 - SUBSTRB
select substrb('한글도 잘 됩니다.', 11, 3) from dual
=> 잘 - LENGTH
select length('한글도 잘 됩니다.') from dual
=> 10 - LENGTHB
select lengthb('한글도 잘 됩니다.') from dual
=> 24 - INSTR
select instr('abcdefg', 'c') from dual
=> 3select instr('한글도 잘 됩니다.', '잘') from dual
=> 5 - INSTRB
select instrb('한글도 잘 됩니다.', '잘') from dual
=> 11 - TRIM
select '>>>' || trim(' aa bb ') || '<<<' from dual
=> >>>aa bb<<<select '>>>' || trim('a' from'aaaaaaabbbaaaaaaa') || '<<<' from dual
=>>>>bbb<<< - LPAD / RPAD
select lpad('abc', 5, '#') from dual
=> ##abcselect rpad('abc', 5, '#') from dual
=> abc## - TO_CHAR
select to_char(sysdate, 'yy-mm-dd') from dual
=> 24-08-22select to_char(sysdate, 'yy-mm-dd hh:mi:ss') from dual
=> 24-08-22 11:24:06select to_char(1000, '000,000') from dual
=> 001,000select to_char(1000, '999,999') from dual
=> 1,000select to_char(1000, 'L9999') from dual
=> ₩1000select to_char(1000, '$9999') from dual
=> $1000select to_char(1000, 's9999') from dual
=> +1000 - TO_DATE
select to_date('24/8/1', 'yy/mm/dd') from dual
=> 24/08/01select trunc(sysdate-to_date('2024/01/01', 'yyyy/mm/dd')) from dual
=> 234select sysdate-to_date('2024/01/01', 'yyyy/mm/dd') from dual
=> 234.480255 - TO_NUMBER
select to_number('1,111', '9,999') + 1 from dual
=> 1112
숫자
- ABS :
select -10, abs(10), abs(-10) from dual
- FLOOR :
select floor(3.14) from dual
=> 3 - ROUND :
select round(3.55) from dual
=> 4select round(1234, -2) from dual
=> 1200 - TRUNC :
select trunc(3.14, 1) from dual
=> 3.1select trunc(1234, -3) from dual
=> 1000 - MOD :
select 5/2, mod(5, 2) from dual
=> 2.5, 1
날짜
- SYSDATE :
select sysdate from dual
=> 24/08/22select sysdate+1 from dual
=> 24/08/23select add_months(sysdate, 1) from dual
=> 24/09/22select next_day(sysdate, 5) from dual
=> 24/08/29select last_day(sysdate) from dual
=> 24/08/31select months_between(sysdate, add_months(sysdate, 3)) from dual
=> -3select round(sysdate) from dual
=> 오후12시가 넘어가면 다음날이 된다.
일반 함수
NULL :
select ename, sal, comm, sal + nvl(comm,0) from emp
DECODE :
select ename, decode(deptno, 10, 'accounting', 20, 'research', 30, 'sales', 40, 'operations') from emp
select ename, nvl(decode(deptno, 10, 'accounting', 20, 'research', 40, 'operations'), 'etc') from emp
CASE :
select case DEPTNO when 10 then 'accounting' when 20 then 'research' when 30 then 'sales' when 40 then 'operations' end from emp
select case when deptno=10 then 'accounting' when deptno=20 then 'research' when deptno=30 then 'sales' when deptno=40 then 'operations' end from emp
그룹함수
- 수행 시 1개의 행으로 결과가 구해짐
- 그룸함수 끼리의 수행이 가능:
select sum(sal), avg(sal), max(sal), min(sal), count(sal) from emp
- SUM : column의 총합
select sum(sal) from emp
select deptno, sum(sal) from emp group by deptno
=> 같은 deptno까리의 합을 보여줌select deptno, sum(sal) from emp group by deptno having deptno<30
select deptno, sum(sal) from emp where deptno<30 group by deptno
- AVG
select deptno, avg(sal) from emp group by deptno
- COUNT
- MAX
- MIN
- STDDEV
- VARIANCE
데이터베이스 권한 보안 (DCL)
계정 만들기 (system 계정에서 실행)
create user user01 identified by password default tablespace USERS quota 2m on USERS;
계정의 lock 풀기
session 만들기
grant create session to user01;
table 권한 부여하기
grant create table to user01;
Java에서 SQL Database CWED 수행하기
더보기
index
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<div>
<div><img src="https://dummyimage.com/200x100/000/fff.png&text=LOGO"></div>
<div>
<center>
<a href="./">[HOME]</a>
<a href="intro.jsp">[Intro]</a>
<a href="bbs/list.jsp">[B B S]</a>
<a href="login/login.jsp">[LOGIN]</a>
</center>
<hr>
</div>
<div>
<!-- begin content -->
<center>
<img src="https://dummyimage.com/600x300/000/fff.png&text=WELCOME">
</center>
<!-- end content -->
</div>
<div>
<hr>
<center>
<p>김해캠퍼스 (50834) 경남 김해시 인제로 197</p>
<p>Copyright © 2024 INJE University. All rights reserved.</p>
</center>
</div>
</div>
</body>
</html>
intro
<img alt="" src="https://www.inje.ac.kr/kor/assets/images/sub/gimhae-campus-1.jpg">
bbs
list
<!-- begin content -->
<center>
<h1>게시판</h1>
<table border="1" cellspacing="0" width="500" align="center">
<tr>
<th width="80">글번호</th>
<th>제목</th>
<th width="100">글쓴이</th>
<th width="100">날짜</th>
</tr>
<%@ page import="java.sql.*" %>
<%
String search=request.getParameter("search");
String keyword=request.getParameter("keyword");
if(search==null)search="sub";
if(keyword==null)keyword="";
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="scott";
String password="tiger";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String sql="select num,nvl(sub,'제목없음'),id,nalja from bbs01 ";
sql+="where "+search+" like('%"+keyword+"%')";
sql+=" order by num desc";
try{
Class.forName(driver);
conn=DriverManager.getConnection(url, user, password);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
while(rs.next()){
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><a href="detail.jsp?idx=<%=rs.getString(1)%>"><%=rs.getString(2) %></a></td>
<td><%=rs.getString(3) %></td>
<td><%=rs.getDate(4) %></td>
</tr>
<%
}
} finally{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(conn!=null)conn.close();
}
%>
</table>
<p>
<form action="#">
<select name="search">
<option value="sub">제목</option>
<option value="id">글쓴이</option>
<option value="content">내용</option>
</select>
<input type="text" name="keyword">
<input type="submit" value="검색">
</form>
</p>
<p><a href="add.jsp">[입력]</a></p>
</center>
<!-- end content -->
insert
<body>
<%@ page import="java.sql.*,java.net.*" %>
<%
String sub=request.getParameter("sub");
String id=request.getParameter("id");
String content=request.getParameter("content");
if(id.isEmpty()){
// server.xml -> URIEncoding="EUC-KR"
sub=URLEncoder.encode(sub,"EUC-KR");
content=URLEncoder.encode(content,"EUC-KR");
response.sendRedirect("add.jsp?sub="+sub+"&content="+content);
return;
}
String sql="select max(num) from bbs01";
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="scott";
String password="tiger";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
int maxNum=0;
try{
conn=DriverManager.getConnection(url, user, password);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next())
maxNum=rs.getInt(1);
}finally{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
}
sql="insert into bbs01 (num,sub,id,nalja,content) values ("
+(maxNum+1)+",'"+sub+"','"+id+"',sysdate,'"+content+"')";
try{
stmt=conn.createStatement();
stmt.executeUpdate(sql);
}finally{
if(stmt!=null)stmt.close();
if(conn!=null)conn.close();
}
response.sendRedirect("list.jsp");
%>
</body>
add
<!-- begin content -->
<center>
<h1>입력 페이지</h1>
<%
String sub=request.getParameter("sub");
String content=request.getParameter("content");
if(sub==null) sub="";
if(content==null)content="";
%>
<form action="insert.jsp">
<table width="500">
<tr>
<td width="100">제목</td>
<td><input value="<%=sub %>" type="text" name="sub" style="width:100%;"></td>
</tr>
<tr>
<td>글쓴이</td>
<td><input type="text" name="id" style="width:100%;"></td>
</tr>
<tr>
<td colspan="2">
<textarea name="content" rows="5" style="width:100%;"><%=content %></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="입 력">
<input type="reset" value="취 소">
<input type="button" value="뒤 로" onclick="history.back();">
</td>
</tr>
</table>
</form>
</center>
<!-- end content -->
detail
<!-- begin content -->
<center>
<%@ page import="java.sql.*" %>
<%
String idx=request.getParameter("idx");
String sql="select id,sub,nalja,content from bbs01 where num="+idx;
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="scott";
String password="tiger";
String sub="",id="",nalja="",content="";
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
Class.forName(driver);
conn=DriverManager.getConnection(url, user, password);
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
if(rs.next()){
id=rs.getString(1);
sub=rs.getString(2);
nalja=rs.getDate(3).toString();
content=rs.getString(4);
}
}finally{
if(rs!=null)rs.close();
if(stmt!=null)stmt.close();
if(conn!=null)conn.close();
}
%>
<h1>상세페이지(<%=idx %>번 글)</h1>
<table width="500">
<tr>
<td width="100">제목</td>
<td colspan="3"><%=sub %></td>
</tr>
<tr>
<td>글쓴이</td>
<td><%=id %></td>
<td width="100">날짜</td>
<td><%=nalja %></td>
</tr>
<tr>
<td colspan="4" height="300" valign="top"><%=content.replace("\n", "<br>") %></td>
</tr>
<tr>
<td colspan="4" align="center">
<a href="edit.jsp?idx=<%=idx%>">[수 정]</a>
<a href="del.jsp?idx=<%=idx%>">[삭 제]</a>
</td>
</tr>
</table>
</center>
<!-- end content -->
del
<!-- begin content -->
<center>
<h1>삭제 페이지</h1>
<%
String idx=request.getParameter("idx");
%>
<p></p>
<table align="center" width="200" height="100" border="1" >
<tr>
<td align="center">
<form action="delete.jsp">
<input type="hidden" name="num" value="<%=idx%>">
<input type="submit" value="삭 제">
<input type="button" value="뒤 로" onclick="history.back();">
</form>
</td>
</tr>
</table>
<p></p>
<p></p>
</center>
<!-- end content -->
delete
<body>
<%@ page import="java.sql.*" %>
<%
String num=request.getParameter("num");
String sql="delete from bbs01 where num="+num;
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@localhost:1521:xe";
String user="scott";
String password="tiger";
Class.forName(driver);
try(
Connection conn=DriverManager.getConnection(url, user, password);
Statement stmt=conn.createStatement();
){
stmt.executeUpdate(sql);
}
response.sendRedirect("list.jsp");
%>
</body>
'100일 챌린지 > 빅데이터기반 인공지능 융합 서비스 개발자' 카테고리의 다른 글
Day 24 - html5, css (0) | 2024.08.26 |
---|---|
Day 23 - SQL 문법 pt.2 (제약 조건) 그리고 JAVA web 페이지 작성 (0) | 2024.08.23 |
Day21 - java에서 sql 사용하기 (0) | 2024.08.21 |
Day20 - TCP/UDP 통신과 Web Server (0) | 2024.08.20 |
Day 19 - Java 네트워크(java.net) (0) | 2024.08.19 |