추후 분류/Database System (Oracle)

PreparedStatement의 executeUpdate();가 동작하지 않을 때 / 무한 루프에 빠졌을 때 / 에러코드 반환 안할 때

반응형

 

 

결론은 '껐다 켜기'다.

 

 

 

JDBC를 통해 DB를 연동하면 자바를 통해 SQL 문을 수행할 수 있다.

 

이때 PreparedStatement 객체를 만들어 SQL 문을 저장한다.

 

만약 SQL문이 update, delete, insert 중 하나면

 

PreparedStatement의 executeUpdate();

 

메서드를 통해 SQL 문을 수행한다.

 

 

코드를 타이핑하던 도중 차례차례 확인하고있었는데,

 

error도 return하지 않고

 

무한루프에 빠지는 현상을 발견했다.

 

 

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

public class JDBCTest {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String sql = null;
		String sql2 = null;
		
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			System.err.println("ClassNotFoundException : " + e.getMessage());
		}
		
		try {
			
			Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xepdb1", "scott", "tiger");
			
			System.out.print("해당 학과 재학생들의 성적을 0.01만큼 더할 학과번호를 입력하세요. : ");
			int input_deptno = scanner.nextInt();
			
            System.out.println("1");
			
			sql = "Update student Set grade = grade + ? Where deptno = ?";
			
            System.out.println("2");
			
            PreparedStatement query = conn.prepareStatement(sql);
			
            System.out.println("3");
			
            float x = (float) 0.01;
			
            System.out.println("4");
			
            query.setFloat(1, x);
			
            System.out.println("5");
			
            query.setInt(2, input_deptno);
			
            System.out.println("6");
            
            query.executeUpdate();
			
            System.out.println("업데이트 성공");

여기서 각각 한줄씩 print문을 달아서 어느 부분이 안돌아가는지 확인 해본 결과,

 

System.outprintln("6"); <<여기 까지는 결과로 잘 나오는데

 

System.outprintln("업데이트 성공"); <<이 코드만 결과로 나오지 않았다.

 

그래서 query.executeUpdate();가 실행도중 오류가생긴것으로 파악했다.

 

구글링을 통해 얻은 결론

 

eclipse, sql developer를 껏다 켜라는 것.

 

껏다 켜니까 잘됬다.

 

 

 


내가 생각하는 충돌이 일어난 이유는

 

내가 eclipse로 해당 db를 연결해놓고

sql developer로 작업을 여러번 했다.

 

오류가 그 이후에 생긴 것으로 미루어보아

db가 eclipse, sql developer로 여러번 번갈아 작업하니까

안에서 충돌이 일어난 것 같다.


 

 

 

 

 

반응형