Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

IT BANK) JSP 13일차 - JSP(Oracle 설치, 명령어) 본문

JSP/IT BANK - JSP

IT BANK) JSP 13일차 - JSP(Oracle 설치, 명령어)

끈기JK 2022. 9. 23. 15:15

220923

 

 

oracle 설치: OracleXE112_Win64

설치 중 Port for 'Oracle Database Listener': 1521 는 포트번호

 

cmd 실행 후 아래 순서대로 처리

Microsoft Windows [Version 10.0.19044.2006]
(c) Microsoft Corporation. All rights reserved.

C:\Users\USER>sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on 금 9월 23 15:46:12 2022

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter user-name: system
Enter password: oracle

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> CREATE USER oracle IDENTIFIED BY oracle;

User created.

SQL> GRANT DBA TO oracle;

Grant succeeded.

SQL> exit
Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

C:\Users\USER>sqlplus

SQL*Plus: Release 11.2.0.2.0 Production on 금 9월 23 15:47:29 2022

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter user-name: Oracle
Enter password: oracle

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

 

테이블이란? 표. 행열 테이블은 데이터를 묶어주는 단위

 

cmd창에 명령어 작성한다. 명령어는 대소문자 상관 없음. 그러나 필수로 써야 하는 건 대문자로 적는다. 외워야 한다.

 


 

■ 기본 명령

 

테이블 생성

CREATE TABLE test(
id varchar2(10), 
pw varchar2(15),
name varchar2(15)
);

Table created.

varchar2와 varchar가 동일하나 varchar2로 쓴다고 한다.

 

 

데이터베이스 안에 테이블 목록 확인

SQL> SELECT * FROM TAB;

TNAME                                                        TABTYPE
------------------------------------------------------------ --------------
 CLUSTERID
----------
TEST                                                         TABLE

 

대시(-) 길이 변경

SQL> set linesize 1000;
SQL> SELECT * FROM TAB;

TNAME                                                        TABTYPE         CLUSTERID
------------------------------------------------------------ -------------- ----------
TEST                                                         TABLE

 

테이블 구조 확인(DESCription)

SQL> DESC test;
 Name




                                   Null?    Type
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 ID




                                            VARCHAR2(10)
 PW




                                            VARCHAR2(15)
 NAME




                                            VARCHAR2(15)

 

테이블 삭제

SQL> DROP TABLE test;

Table dropped.

 

테이블에 데이터 삽입

SQL> INSERT INTO test VALUES('admin', '1234', '김변수');

1 row created.

SQL> SELECT * FROM test;

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
admin                1234                           김변수

 

데이터 열을 선택해서 SELECT 할 수 있다.

SQL> SELECT ID, NAME FROM test;

ID                   NAME
-------------------- ------------------------------
admin                김변수

 

데이터를 특정 열만 넣을수 있다.

SQL> INSERT INTO test(id, pw) VALUES('user1', '1111');

1 row created.

SQL> SELECT * FROM test;

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
admin                1234                           김변수
user1                1111

 

열 순서대로 안하고 열 이름 순서를 바꿔서 INSERT 해도 된다.

SQL> INSERT INTO test(id, name, pw) VALUES('user1', '유저일', '1111');

1 row created.

SQL> SELECT * FROM test;

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
admin                1234                           김변수
user1                1111
user1                1111                           유저일

 

열을 잘못 지정해서 데이터 찾으면 없다고 나온다.

없는 데이터 선택하면 데이터 없다고 나온다.

SQL> SELECT id, pw FROM test WHERE id='김변수';

no rows selected

SQL> SELECT id, pw FROM test WHERE id='admin';

ID                   PW
-------------------- ------------------------------
admin                1234

SQL> SELECT id, pw FROM test WHERE id='admin1';

no rows selected

where: 조건절.

java와 다르게 같다를 표현할때 = 하나만 쓴다.

 

 

DELETE 명령으로 삭제시 해당 데이터 행 모두 삭제한다.

SQL> DELETE FROM test WHERE id='user1';

2 rows deleted.

 

UPDATE 명령으로 값 수정한다.

SQL> UPDATE test SET pw='admin' WHERE id='admin';

1 row updated.

SQL> SELECT * FROM test;

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
admin                admin                          김변수

 

데이터 추가

SQL> INSERT INTO test VALUES('user1', '1111', '이상수');

1 row created.

SQL> INSERT INTO test VALUES('user2', '2222', '박참조');

1 row created.

SQL> SELECT * FROM test;

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
admin                admin                          김변수
user1                1111                           이상수
user2                2222                           박참조

 

UPDATE 명령시 WHERE 지정하지 않으면 모든 행이 다 바뀐다. UPDATE, DETELE 사용시 주의해야 한다.

SQL> UPDATE test SET pw='1234', name='홍길동';

3 rows updated.

SQL> SELECT * FROM test;

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
admin                1234                           홍길동
user1                1234                           홍길동
user2                1234                           홍길동

 

최대한 필요한 데이터만 조회한다.

SQL> SELECT id, name FROM test WHERE id='user2';

ID                   NAME
-------------------- ------------------------------
user2                박참조

SQL> SELECT * FROM test WHERE id='user2';

ID                   PW                             NAME
-------------------- ------------------------------ ------------------------------
user2                2222                           박참조

데이터베이스 부하가 많기 때문에 쓰기, 읽기 데이터베이스가 따로 존재하기도 한다.

 

 

SQL plus에서는 commit 입력하면 DB에 저장된다.

SQL> commit;

Commit complete.

 

# 화면 지우기

SQL> clear screen
   
아래와 같이 쓰다 말아도 가능하다.
SQL> clea scree
SQL> cle scre
...
# 아래와 같이 최소한으로는 써야 한다.
SQL> cl scr

 


 

■ JSP - DB 간 통신

 

서로 다른 프로그램이므로 데이터 받을때 Driver가 필요하다.

C/oraclexe 에서 검색어 입력하여 파일을 해당 경로에 복사한다.

이클립스에서 확인 가능하다.

 

이클립스에서 class 생성

 

ctrl + F11 후 Java Application 선택해서 OK 눌러서 "접근 완료" 뜨면 된다.

// SelectDAO.java
package session;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class SelectDAO {

	public static void main(String[] args) {
	 	// DB 접속하기 위한 객체 생성
		Connection con = null;
        
		// JDBC : Java DataBase Connectivity
		// oracle : 연결할 데이터베이스 프로그램명
		// thin : 경량화
		// localhost : 데이터베이스 서버의 IP주소(현재는 같은 컴퓨터에 DB 있으나 나중에는 따로 컴퓨터 구분), localhost == 자기자신 IP주소(숫자 대신 사용)
		// 1521 : oracle의 포트 번호
		// xe : oracle 프로그램의 서비스 이름
		String url = "jdbc:oracle:thin:@localhost:1521:xe";  // 오라클 위치
		String user = "oracle";  // 오라클 계정 아이디
		String password = "oracle";  // 오라클 계정 비밀번호
		try {
			// ojdbc6.jar 드라이버 실행
			Class.forName("oracle.jdbc.OracleDriver");
            
			// 데이터베이스에 접근 후 아이디/비밀번호 입력해서 인증 받고 연결정보를 반환한다.
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			System.out.println("접근 실패");
		}
		System.out.println("접근 완료");
		
		// 데이터베이스로 명령문을 전달해 정보를 획득
		// ? : 변경할 데이터는 물음표로 표현
		Scanner sc = new Scanner(System.in);
		System.out.print("조회할 계정 아이디 : ");
		String id = sc.next();
		String sql = "SELECT * FROM test WHERE id = ?";
		
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			ps = con.prepareStatement(sql);
            
			// ps.setString(물음표의 위치(시작1), 교체할 데이터);
			ps.setString(1,  id);
//			ps.setString(2,  pw);

			// 데이터베이스로 명령문 전달 후 결과를 반환
			rs = ps.executeQuery();
            
			// rs.next() : 반환된 결과에 데이터의 존재여부를 true or false
			// 반환된 결과값에 접근, 데이터는 여러 행으로 얻어오면 다음 행으로 이동
			if(rs.next()) {
				System.out.println("아이디 : " + rs.getString("id"));
				System.out.println("비밀번호 : " + rs.getString("pw"));
				System.out.println("이름 : " + rs.getString("name"));
			}else {
				System.out.println("입력한 데이터는 존재하지 않습니다.");
			}
		} catch (Exception e) {
			
		}
	}
}

 

포트번호는 아래처럼 확인 가능하다.

 

url 맨 끝 xe 확인

 

Connection 자료형의 변수를 con으로 만들어서 저장. 특별 대상을 식별하기 위한 목적

 

prepareStatement가 보안 관련 문제도 처리해 준다.

 

데이터 있는지 true or false 반환. while 문 쓰면 좋다.

 

실행 후 admin 입력

실행 후 user1 입력

 

 

// insertDAO.java
package session;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class InsertDAO {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		Connection con = null;
		PreparedStatement ps = null;
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "oracle";
		String password = "oracle";
		String sql = "INSERT INTO test VALUES(?, ?, ?)";
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
			
			System.out.print("아이디 : "); String id = sc.next();
			System.out.print("비밀번호 : "); String pw = sc.next();
			System.out.print("이름 : "); String name = sc.next();
			
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			ps.setString(2, pw);
			ps.setString(3, name);
			// SELECT 명령이 아닌 것들 ? INSERT, UPDATE, DELETE은 executeUpdate()로 디비에 명령문 전달.
			int result = ps.executeUpdate();		
			if(result != 0)
				System.out.println("데이터 입력이 완료 되었습니다.");
			else
				System.out.println("데이터 입력에 문제가 발생했습니다. 관리자에게 문의하세요");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
// selectAllDAO.java
package session;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

public class SelectAllDAO {

	public static void main(String[] args) {
		Connection con = null;

		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "oracle";
		String password = "oracle";
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
		} catch (Exception e) {
			System.out.println("접근 실패");
		}
		
		String sql = "SELECT * FROM test";
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		try {
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			while(rs.next()) {
				System.out.println("아이디 : " + rs.getString("id"));
				System.out.println("비밀번호 : " + rs.getString("pw"));
				System.out.println("이름 : " + rs.getString("name"));
				System.out.println();
			}
		} catch (Exception e) {
			
		}
	}
}

 

해당 java 파일들은 외워서 치므로 손에 익게 많이 쳐보라.

 

파란부분만 다르므로 나머지는 암기

// UpdateDAO.java
package session;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class UpdateDAO {

	public static void main(String[] args) {
		Connection con = null;
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "oracle";
		String password = "oracle";
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		Scanner sc = new Scanner(System.in);
		System.out.print("수정 대상 아이디 : "); String id = sc.next();
		System.out.print("비밀번호 : "); String pw = sc.next();
		System.out.print("이름 : "); String name = sc.next();
		
		String sql = "UPDATE test SET pw=?, name=? WHERE id=?";
		PreparedStatement ps = null;
		
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, pw);
			ps.setString(2, name);
			ps.setString(3, id);
			int result = ps.executeUpdate();
			if(result != 0)
				System.out.println("데이터 수정이 완료 되었습니다.");
			else
				System.out.println("데이터 수정에 문제가 발생했습니다. 관리자에게 문의하세요");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}
// DeleteDAO.java
package session;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Scanner;

public class DeleteDAO {
	public static void main(String[] args) {
		Connection con = null;
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "oracle";
		String password = "oracle";
		
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			con = DriverManager.getConnection(url, user, password);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		Scanner sc = new Scanner(System.in);
		System.out.print("삭제 대상 아이디 : "); String id = sc.next();
		
		String sql = "DELETE FROM test WHERE id=?";
		PreparedStatement ps = null;
		
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, id);
			int result = ps.executeUpdate();
			if(result != 0)
				System.out.println("데이터 삭제 완료 되었습니다.");
			else
				System.out.println("데이터 삭제 문제가 발생했습니다. 삭제할 아이디를 확인하세요.");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}