개발자입니다
IT BANK) JSP 13일차 - JSP(Oracle 설치, 명령어) 본문
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();
}
}
}
'JSP > IT BANK - JSP' 카테고리의 다른 글
IT BANK) JSP 15일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.27 |
---|---|
IT BANK) JSP 14일차 - JSP(회원관리 페이지(SQL)) (0) | 2022.09.26 |
IT BANK) JSP 12일차 - JSP(회원관리 페이지) (0) | 2022.09.22 |
IT BANK) JSP 11일차 - JSP(세션) (0) | 2022.09.21 |
IT BANK) JSP 10일차 - JSP(쿠키) (0) | 2022.09.20 |