본문 바로가기
Database & Bigdata/Oracle

[1/29] 강의정리 (JDBC, DBConnection, Java, Oracle, Mybatis)

by jionee 2021. 1. 29.
SMALL

CREATE OR REPLACE VIEW

그냥 CREATE VIEW를 통해 만들어진 뷰의 구조를 바꾸려면 뷰를 삭제하고 다시 만들어야 하지만 

CREATE OR REPLACE VIEW는 새로운 뷰를 만들 뿐만 아니라 기존의 뷰가 존재하더라도 삭제하지않고 새로운 구조로 변경(REPLACE) 

 

 

FORCE

기존 테이블의 존재 여부에 상관없이 뷰를 생성

 

WITH CHECK OPTION

해당 뷰를 통해 볼 수 있는 범위 내에서만 UPDATE또는 INSERT가 가능

 

WITH READ ONLY

 with read only를 사용하면 해당 뷰를 통해서는 SELECT 만 가능(삽입 수정 삭제 불가능)

 

 

VIEW 생성 예제

CREATE VIEW EMP_VIEW30
AS
SELECT EMPNO, ENAME, DEPTNO
FROM EMP
WHERE DEPTNO=30;

v

 

 

 

시퀀스

순차적으로 중복되지않는 숫자 생성

 

시퀀스 생성 기본 형식)

1. START WITH n

시퀀시 번호의 시작값 지정

2. INCRREMENT BY n

증가치 지정

 

예제)

-- 시퀀스 생성 (10부터 10씩 증가)
CREATE SEQUENCE DEPT_DEPTNO_SEQ
INCREMENT BY 10
START WITH 10;

-- NEXTVAL로 새로운 값 생성
SELECT DEPT_DEPTNO_SEQ.NEXTVAL FROM DUAL; 

-- CURRVAL로 현재 값
SELECT DEPT_DEPTNO_SEQ.CURRVAL FROM DUAL; 

 

 

 

JDBC(Java Database Connectivity)

- 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API

- JDBC API는 데이터베이스에 연결을 위해 JDBC Driver를 이용

- java.sql, javax.sql 패키지를 이용

 

 

 

 

JDBC로 자바에서 오라클 연결

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class ConnectionTest {

	public static void main(String[] args) {
		String jdbc = "oracle.jdbc.driver.OracleDriver";
    	String url = "jdbc:oracle:thin:@localhost:1521:xe";

    	String uid = "scott";
    	String pwd = "tiger";
    	
    	Connection con = null;
    	Statement smt = null;
    	ResultSet rs = null;
    	
    	try {
    		Class.forName(jdbc);
    		
    		con = DriverManager.getConnection(url,uid,pwd);
    		
    		System.out.println("데이터베이스 연결 성공");
    		
    		smt = con.createStatement();
    		
    		rs = smt.executeQuery("select sysdate from dual");
    		
    		while(rs.next())
    		{
    			System.out.printf("현재시간: %s\n", rs.getString(1));
    		}
    		
    	}

    	catch (Exception ex) {
    		ex.printStackTrace();
    	}
    	finally {
    		try {
    			if(con!=null) rs.close();
    			if(con!=null) smt.close();
    			if(con!=null) con.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
	}

}

 

 

최근에 많이 쓰는 try catch 스타일)

try (
    		Connection con1 = DriverManager.getConnection(url,uid,pwd);
    		Statement stat = con1.createStatement();
    		ResultSet rs1 = stat.executeQuery("select sysdate from dual");
    	) {
    		System.out.println("데이터베이스 연결에 성공했습니다.");
    		
    	while(rs1.next()) 
    		{
    		System.out.printf("현재시간: %s\n", rs1.getString(1));
			}
    	}
    	catch (SQLException e) {
			e.printStackTrace();
		}
        

 

 

 

 

DBConnection 클래스 만들기

package database;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnection {
	
	private static Connection conn;
	
	private DBConnection() {}
	
	public static Connection getConnection() throws Exception {
		
		
		if(conn!= null) {
			if(!conn.isClosed()) return conn;
		}
		
		String jdbc = "oracle.jdbc.driver.OracleDriver";
    	String url = "jdbc:oracle:thin:@localhost:1521:xe";
    	String uid = "scott";
    	String pwd = "tiger";

    	try {
    		Class.forName(jdbc);
    		conn = DriverManager.getConnection(url,uid,pwd);
    	}
    	
    	catch (Exception ex) {
    		ex.printStackTrace();
    	}
		
		
		return conn;
	}

}

 

 

 

 

DBConnection 클래스 사용해 데이터베이스 연결하고 Select

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SelectTest {

	public static void main(String[] args) throws Exception {
		try (
	    		Connection con1 = DBConnection.getConnection();
	    		Statement stat = con1.createStatement();
	    		ResultSet rs1 = stat.executeQuery("select code, name, price, maker from goodsinfo");
	    	) {
	    		System.out.println("데이터베이스 연결에 성공했습니다.");
	    		
	    	while(rs1.next()) 
	    		{
	    		System.out.println(rs1.getString("code"));
				}
	    	}
	    	catch (SQLException e) {
				e.printStackTrace();
			}

	}

}

 

 

 

 

DBConnection 클래스 사용해 데이터베이스 연결하고 Insert

package database;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class InsertTest {

	public static void main(String[] args) throws Exception {
		
		String sql = "insert into goodsinfo (code, name, price, maker) values('10006','김치냉장고',100000,'삼성')";
		
		try (
	    		Connection con1 = DBConnection.getConnection();
	    		Statement stat = con1.createStatement();
	    		
	    	) {
			int rowNum = stat.executeUpdate(sql);
			System.out.println("추가 되었습니다.");
		}
		
		catch (SQLException e) {
				e.printStackTrace();
			}

	}

}

 

 

 

 

DBConnection 클래스 사용해 데이터베이스 연결하고 Update

package database;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class UpdateTest {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		String sql = "update goodsinfo set name = '중형냉장고',price=12000 , maker = '삼성' where code = '10006'";
		
		try (
	    		Connection con1 = DBConnection.getConnection();
	    		Statement stat = con1.createStatement();
	    		
	    	) {
			int rowNum = stat.executeUpdate(sql);
			System.out.println("수정 되었습니다.");
		}
		
		catch (SQLException e) {
				e.printStackTrace();
			}
	}

}

 

 

 

 

DBConnection 클래스 사용해 데이터베이스 연결하고 Delete

package database;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

public class DeleteTest {

	public static void main(String[] args) throws Exception {
		String sql = "delete from goodsinfo where code = '10006'";
	
	try (
    		Connection con1 = DBConnection.getConnection();
    		Statement stat = con1.createStatement();
    		
    	) {
		int rowNum = stat.executeUpdate(sql);
		System.out.println("삭제되었습니다.");
	}
	
	catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

 

 

 

Mybatis로 데이터베이스 연결

// SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<environments default="lect">
		<environment id="lect">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
				<property name="username" value="scott"/>
				<property name="password" value="tiger"/>	
			</dataSource>
		</environment>
	</environments>
</configuration>

 

// ConnectionTest2.java

package database;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class ConnectionTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String resource = "database/mybatis/SqlMapConfig.xml";
		SqlSession sqlSession = null;
		
		try {
			Reader reader = Resources.getResourceAsReader(resource);  
        	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        	reader.close();
        	
        	sqlSession = sqlSessionFactory.openSession();
        	
    		System.out.println("데이터베이스 연결 성공");
        	
		}
		catch(Exception e) {
			e.getStackTrace();
		}
		finally {
			sqlSession.close();
		}
		

	}	

}

 

 

 

 

Test.xml 추가하기 (SQL과 Java의 분리)

// SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<environments default="lect">
		<environment id="lect">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
				<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
				<property name="username" value="scott"/>
				<property name="password" value="tiger"/>	
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
			<mapper resource = "database/mybatis/Test.xml"/>
	</mappers>
</configuration>

 

//Test.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="Test">
	<select id="getTest" resultType="string">
	<![CDATA[
		  SELECT sysdate FROM DUAL
		]]>
	</select>
</mapper>

 

// ConnectionTest2.java

package database;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class ConnectionTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String resource = "database/mybatis/SqlMapConfig.xml";
		SqlSession sqlSession = null;
		
		try {
			Reader reader = Resources.getResourceAsReader(resource);  
        	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        	reader.close();
        	
        	sqlSession = sqlSessionFactory.openSession();
        	
    		System.out.println("데이터베이스 연결 성공");
        	
    		String now = sqlSession.selectOne("Test.getTest");
    		System.out.println("현재 시간 : " + now);
		}
		catch(Exception e) {
			e.getStackTrace();
		}
		finally {
			sqlSession.close();
		}
		

	}	

}

 

SQL문은 Test에서 작성해 사용함

댓글