
<%@ page import="java.sql.*"%>
<%-- <%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.ResultSet"%> --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "scott";
String upw = "tiger";
String query = "select * from emp";
try{
Class.forName(driver);
connection = DriverManager.getConnection(url,uid,upw);
statement = connection.createStatement();
resultSet = statement.executeQuery(query);
while(resultSet.next()){
int empno = resultSet.getInt("empno");
String ename = resultSet.getString("ename");
String job = resultSet.getString("job");
int mgr = resultSet.getInt("mgr");
String hiredate = resultSet.getString("hiredate");
int sal = resultSet.getInt("sal");
String comm = resultSet.getString("comm");
int deptno = resultSet.getInt("deptno");
out.print("empno : " + empno + " / ename : " + ename +
" / job : " + job + " / mgr : " + mgr +
" / hiredate : " + hiredate + " / sal : " + sal +
" / comm : " + comm + " / deptno : " + deptno +"</br>");
}
}catch(Exception e){
}finally{
try{
if(resultSet != null) resultSet.close();
if(statement != null) statement.close();
if(connection != null) connection.close();
} catch(Exception e){}
}
%>
</body>
</html>
SQL(Structured Query Language)의 종류.
데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL)
CREATE : 테이블 생성
DROP : 테이블 삭제
ALTER : 테이블 수정
TRUNCATE : 테이블에 있는 모든 데이터 삭제
GRANT : 권한 생성
REVOKE : 권한 삭제
SELECT 조회
INSERT 삽입
UPDATE 수정
DELETE 삭제
ABS: 절대값을 구하는 함수
SELECT ABS(숫자) FROM 테이블;
floor: 소수점 아래를 버리는 함수
SELECT FLOOR(소수) FROM 테이블;
round: 특정 자릿수에서 반올림하는 함수
SELECT ROUND(대상, 자릿수) FROM 테이블;
TRUNC: 특정 자릿수에서 잘라내는(절삭) 함수
SELECT(값, 자릿수) FROM 테이블;
MOD: 나누기 연산을 한 후 나머지를 결과로 되돌려 주는 함수
SELECT MOD(숫자, 나눌값) FROM 테이블;
TRUNCATE 명령어는 용량이 줄어들고, 인덱스 등도 모두 삭제 된다. 테이블은 삭제하지는 않고, 데이터만 삭제한다. 한꺼번에 다 지워야 한다. 삭제 후 절대 되돌릴 수 없다.
DROP 명령어는 테이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제 후 절대 되돌릴 수 없다.
동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법
JSP 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것
데이터 표현을 목적으로 하는 자바 클래스
1) 웹 브라우저가 JSP 페이지에 요청을 전송한다.
2) JSP 페이지는 자바빈즈와 통신한다.
3) 자바빈즈가 데이터베이스에 연결된다.
4) JSP 페이지가 브라우저에 응답한다.
데이터를 담는 멤버 변수인 프로퍼티와 데이터를 가져오거나 저장하는 메소드로 구성된다.
1) 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 한다.
2) 인수가 없는 기본 생성자가 있어야 한다.
3) 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
4) 모든 멤버 변수인 프로퍼티는 Getter/Setter() 메소드가 존재해야 한다.
Getter() 메소드: 멤버 변수에 저장된 값을 가져올 수 있는 메소드
Setter() 메소드: 멤버 변수에 값을 저장할 수 있는 메소드
import java.io.Serializable;
public class MemberBean implements java.io.Serializable{
private int id; // 멤버 변수(프로퍼티) 정의
private String name;
public MemberBean(){ // 기본 생성자
}
// Gette/Setter() 메소드 작성
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
useBean 액션 태그란?
JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그
설정된 id 속성과 scope 속성을 바탕으로 자바빈즈의 객체를 검색하고, 객체가 발견되지 않으면 빈 객체를 생성한다.
<jsp:useBean id="자바빈즈 식별이름" class="자바빈즈 이름" scope="범위"/>
id: 자바빈즈를 식별하기 위한 이름
class: 패키지 이름을 포함한 자바빈즈 이름. 인수가 없는 기존 생성자가 있어야 하며 추상 클래스를 사용할 수 없다.
scope: 자바빈즈가 저장되는 영역 설정. page(기본값), request, session, application 중 하나의 값을 사용한다.
useBean03.jsp
public class Person{
private int id = 20181004;
private String name = "손흥민";
public Person(){
}
public int getId(){
return id;
}
public void setId(int id){
this.id=id;
}
public String getName(){
return id;
}
public void getName(String name){
this.name=name;
}
}
useBean04.jsp
<body>
<jsp:useBean id="person" class="ch04.dao.Person" scope="request"/>
<p> 아이디: <%=person.getId()%>
<p> 이름: <%=person.getName()%>
<%
person.setId(20182005);
person.setName("손흥민");
%>
<jsp:include page="useBean03.jsp/>
</body>

Connetion : DB와 연결되는 통로 생성
쿼리를 전달하고 결과값을 반환한다.
forName() 메소드를 통하거나 아니면 자동으로 드라이버가 로드될 때 jdbc 드라이버는 DriverManager에 자신을 등록한다. 따라서 별도의 작업을 하지 않고도 Connection 객체를 얻어올 수 있다.
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "admin";
String upw = "oracle";
connection = DriverManager.getConnection(url, uid, upw);
Statement : 정적 SQL문을 실행해, 작성된 결과를 돌려줌
Statement 객체는 Statement 인터페이스를 구현한 객체를 Connection 클래스의 createStatement() 메소드를 호출함으로써 얻어진다.
select문은 데이터베이스로부터 데이터를 쿼리하고 출력한다.
ResultSet : SELECT문의 결과를 저장하는 객체
ResultSet은 Statement를 통해 값을 저장한다. 이때, executeQuery(String sql) 메소드를 통해 저장할 수 있다.
=========================================================
Student student = new edu.kosmo.ex.Student();
<jsp:useBean id="student" class="edu.kosmo.ex.Student"></jsp:useBean>
<jsp:setProperty name="student" property="name" value="홍길동" />
이름 : <jsp:getProperty ~~~ />
국어 : <jsp:getProperty ~~~ />
영어 : <jsp:getProperty ~~~ />
수학 : <jsp:getProperty ~~~ />
총점 : <jsp:getProperty ~~~ />
평균 : <jsp:getProperty ~~~ />
=======================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="grade.jsp">
이름 : <input type="text" name="name" size="10" /><br/>
국어 : <input type="number" name="kor" size="10" /><br/>
영어 : <input type="number" name="eng" size="10" /><br/>
수학 : <input type="number" name="math" size="10" /><br/>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="grade" class="edu.global.ex.Grade2" />
<jsp:setProperty property="name" name="grade" param="name"/>
<jsp:setProperty property="kor" name="grade" param="kor"/>
<jsp:setProperty property="eng" name="grade" param="eng"/>
<jsp:setProperty property="math" name="grade" param="math"/>
이름 : <jsp:getProperty property="name" name="grade"/><br/>
국어 : <jsp:getProperty property="kor" name="grade"/><br/>
영어 : <jsp:getProperty property="eng" name="grade"/><br/>
수학 : <jsp:getProperty property="math" name="grade"/><br/>
총점 : <jsp:getProperty property="total" name="grade"/><br/>
평균 : <jsp:getProperty property="avg" name="grade"/><br/>
</body>
</html>
package edu.global.ex;
public class Grade2 {
private int kor, eng, math;
private String name;
public Grade2(String name,int kor, int eng, int math) {
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade2() {
// TODO Auto-generated constructor stub
}
public int getTotal() {
return kor + eng + math;
}
public double getAvg() {
return getTotal() / 3.0;
}
}
흥민쟝...... 너무 인상깊어요...