쿼리에 에러가 발생했다. 

웅? 하고 보니 쿼리에 세미콜론 이 들어가있다~~~!!!!  

 

지워주면 처리완료! 

 

문자가 부적합하다는 에러가 난다면 

콤마(,) 세미콜론(;) 마침표(.) 등 쿼리에 포함된 문자를 확인해보자! 

자바에 오라클 DB연동을 해봅시다! 

 

1. ojdbc를 다운받아야합니다 (https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html

저는 java8 사용중으로 ojdbc8.jar을 다운받았다. ( 자바8이면 아래 jar 다운받으면 됨)

ojdbc8.jar
4.81MB

 

2.  라이브러리 추가해주기 

프로젝트에 JRE system ... 우클릭 후 Properties를 선택하고 아래 이미지와 같이 클릭클릭! 따라간다. 

 

 

다운받은 경로에있는 jar를 선택해주면 됩니다. 

 

적용이 완료되면 아래와 같이 라이브러리가 적용된게 보인다. 

 

자 이제 DB Connection 을 담당할 Class를 생성해주자.

DB username 과 pw를 입력하고 url은 본인이 접속하고자 하는 정보로 연결하면 된다. 나는 로컬DB로 연결~~ 

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

public class DBHelper {
	
    public static Connection dbConn;
    
    public static Connection getConnection() {
        Connection connect = null;
        
        try {
        	// 접속정보 설정 
            String user = "아이디"; 
            String pw = "비번";
            String url = "jdbc:oracle:thin:@localhost:1521:orcl";
            
            // 드라이버 셋팅 
            Class.forName("oracle.jdbc.driver.OracleDriver");
            
            // 연결! 
            connect = DriverManager.getConnection(url, user, pw);
            
            System.out.println("----------OK;");
           
        } catch (ClassNotFoundException cnfe) {
            System.out.println("DB 드라이버 로딩 실패 :"+cnfe.toString());
        } catch (SQLException sqle) {
            System.out.println("DB 접속실패 : "+sqle.toString());
        } catch (Exception e) {
            System.out.println("Unkonwn error");
            e.printStackTrace();
        }
        return connect;     
    }

    public static void main(String[] args) {
    	// 연결테스트 
    	getConnection();
	}
}

 

자 이제 실행해보면  연결이 잘되었다면 콘솔창에 "DB Connection OK;" 문구가 출력된다.~ 

 

 

 

여기까지 잘 되었다면 이제 CRUD를 실행해보자 ~~

 


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



public class MyTest {

    public static void main(String[] args) {

		Connection con = null; // 데이터베이스에 접속하기 위한 변수
		Statement stmt = null; // SQL 구문을 실행하기 위한 변수
		ResultSet rs = null; // Select 구문 실행했을 때 결과를 저장하기 위한 변수
		PreparedStatement pstmt = null; // 삽입을 위한 Statement 변수 선언

		try {

			/*******************************************
			 * DB CONNECTION
			 ******************************************/
			con = DBHelper.getConnection();
			System.out.println(con);
			
			

			/*******************************************
			 * INSERT
			 ******************************************/
			pstmt = con.prepareStatement("insert into 테이블명 (컬럼명1, 컬럼명2) values(?, ? )");
			// 물음표에 들어갈 값들을 정의해준다. 
			pstmt.setString(1, "A1");
			pstmt.setString(2, "A2");
			int result = pstmt.executeUpdate();
			pstmt.close();
			
			
			
			/*******************************************
			 * SELECT
			 ******************************************/
			stmt = con.createStatement();
			rs = stmt.executeQuery("select * from 테이블명");
			while (rs.next()) {
				// 컬럼 순서대로 타입에 맞춰 출력하면 된다.
				// 첫번째 컬럼이 숫자 타입인 경우 rs.getInt(1)
				// 두번째 컬럼이 문자 타입인 경우 rs.getString(2)
				System.out.println(rs.getInt(1) + ":" + rs.getString(2));
			}
			;
			stmt.close();
			if (rs.next()) System.out.println("데이터가 없습니다.");
			
			
			

			/*******************************************
			 * UPDATE
			 ******************************************/
			String tmp = "UPDATE 테이블명 SET 컬럼명 = 업데이트할 값  WHERE 조건";
			pstmt = con.prepareStatement(tmp);
			pstmt.executeUpdate();
			pstmt.close();

			
			
			
			/*******************************************
			 * DELETE
			 ******************************************/
			stmt = con.createStatement();
			rs = stmt.executeQuery("delete from 테이블명 where 조건");
			stmt.close();
			
			

		} catch (SQLException e) {
			e.printStackTrace();

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

	}

}

 

만약 실행 중 에러가 발생하거나 DB에 업데이트가 안되는 경우 DB툴에서 COMMIT;  한번해주기~~ 

 

 

끝! 

 

랜덤으로 뽑은 ROW 를 UPDATE 해야하는 일이 있었다. 

랜덤으로 뽑기 위해 ORDER BY DBMS_RANDOM.RANDOM를 사용하려고 하는데 

 

IN 절에 ORDER BY가 사용불가하다~!

 

그러나. 

아래처럼 꼼수를 사용하면 사용가능하다~

 

SELECT문으로 한번 감싸주면 정상적으로 동작한다. 

UPDATE 
	TEST_TAB 
SET 
	N1 = 1  
WHERE 
	ID IN 
    	( SELECT * FROM (SELECT ID FROM TEST_TAB ORDER BY DBMS_RANDOM.RANDOM) WHERE ROWNUM < 1500) 
   	

 

 

끝!! 

 

 

SpringBoot Session Timeout 설정을 해보겠습니다~ 

 

1. bean을 정의해둔 config 파일에 SessionListener 등록! 

@Bean
public HttpSessionListener httpSessionListener(){
	return new SessionListener();
}

 

2. SessionListener 파일 생성! 

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


public class SessionListener  implements HttpSessionListener{

	@Override
	public void sessionCreated(HttpSessionEvent session) {
		// 초단위로 설정된다. 테스트로 300(5분)으로 설정
        session.getSession().setMaxInactiveInterval(60*5);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
	}

}

 

3. 시간이 잘 설정되었는지 확인하기! Controller에 세션을 확장할 메소드를 하나 생성한다. 

 

@PostMapping("/extendSession")
ResponseBody
public boolean  extendSession() {
	logger.info("로그인 세션 연장");
	logger.info(request.getSession().getMaxInactiveInterval()); 
	logger.info("==============================");
      
    // 리턴값으론 로그인 여부를 리턴해주고있다. 본인코드에 맞춰 수정하기 
	return 로그인여부(true or false) ; 
}

 

이 메소드를 호출하면 아래 이미지처럼 설정된 시간이 초단위로 출력된다. 

* 설정한 값으로 변경이 안된다면 브라우저 캐시 지우고 다시 실행하자!! 

 

 

Session 만료를 사용자에게 알리기 위해 script 작업을 추가했다. 

main_layout.html 에 스크립트 추가~ ( 전역에서 사용되는 공간에 추가하면 됩니다. )

 

//<![CDATA[
        $(function () {
        	
            // 세션을 5분으로 설정해둬서 5로 설정함! 자기 시간에 맞춰 설정하기
            // 숫자 5는 상수값으로 처리해서 사용하면 좋겠다! 
         	var sessionTimeChecker = 5;
            
            // 1분에 한번씩 인터발을 이용해 남은 시간을 계산한다. 
            var sessionInterval = setInterval(checkSession, 60000);
            
            // 비동기 요청을 캐치해 시간을 리셋해준다. 
            $(document).ajaxStart(function () {
            	if(loginck) { // 로그인 여부 확인 후 세션 리셋 
	            	sessionTimeChecker = 5;
            	} else { 
                	// 로그인이 안된 상태라면 인터발 종료 
            		clearInterval(sessionInterval);	
            	}
             });
            
            
            
            // 1분에 한번씩 호출되는 함수로 1분이 남았을때 alert를 출력해준다. 
            function checkSession() { 
		sessionTimeChecker -= 1; // 1분씩 마이너스해서 남은 시간을 계산한다. 
		console.log("인터발 동작 " + sessionTimeChecker +"  " +  new Date() );
            	
                // 1분이 남은 경우 알림창 띄운다. 
                // 확인버튼을 눌렀으나 이미 로그아웃된 경우는 만료알림 문구를 출력하고 페이지를 새로고침한다.
            	if(sessionTimeChecker == 1) { 
            		if(confirm("장시간 사용되지 않아 1분뒤 자동으로 로그아웃됩니다. \n로그인 시간을 연장하시려면 확인 버튼을 클릭해주세요.")) { 
            			$.post("/extendSession").done(function(data) {
            				if(!data) {
            					alert("유효시간 만료로 로그아웃 되었습니다.");
            					location.reload(); // 리로드되면 로그인화면으로 자동 변경됨 
            				}
            			});
            		}
            	}	
            }
            
            
        });
        
        //]]>

 

* 여러번 반복되는 숫자들은 상수로 처리해서 하나만 수정하면 전부 수정되도록 코딩하는게 좋다.

아래 코드는 샘플로 값을 바로 확인하기 위해 그대로 입력해둠!  

 

무료로 사용 가능한 erd 툴이있다 .

정말 필요한것만 깔끔하게 들어있는거 같아 웬만한 유료툴보다 좋다. 

회원가입하고 특정 키를  공유하면 다른 사용자와 erd도 공유 가능하다. 

 

AQueryTool - AQuery.Web

AQueryTool은 웹 기반 ERD 툴 + SQL 자동 생성 프로그램입니다.

aquerytool.com

 

 

'기타 정보' 카테고리의 다른 글

[기술사 응시자격] 경력 산정 기준!  (0) 2021.06.08

+ Recent posts