본문 바로가기
MySql

MySQL Java에서 MySQL에 임시 테이블 만들기

by 베이스 공부 2021. 2. 15.
반응형

나는 이것을 가지고있다:

public static void createTemporaryTable() {
        Statement s = null;
        sentence = "CREATE TEMPORARY TABLE Book (ISBN int NOT NULL, " +
                "title varchar(45), author varchar(45), price double, PRIMARY KEY  (`ISBN`));";

        try {
            s = Conexion.getInstancia().createStatement();
            s.executeUpdate(sentence);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                s.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

그때:

public class System {

    public static void main(String[] args) {
        SqlSentencesList.createTemporaryTable();
    }

}

그러나 select * from Book 을 실행하면 MySQL은 Book 테이블이 존재하지 않는다고 알려줍니다. Java에서 오류 메시지가 표시되지 않으므로 테이블을 만들어야하지만 그렇지 않습니다.

mysql에서 직접 임시 테이블을 생성하기 위해 동일한 SQL 문장을 실행하면 정상적으로 작동합니다.

이것은 내 Conexion 클래스입니다.

public class Conexion {

    private static Connection conexion = null;



    private Conexion() {

    }

    public static Connection getInstancia() {
        if (conexion == null) {
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conexion = DriverManager.getConnection(
                        "jdbc:mysql://localhost/Esquema_VentaLibros","gustavo", "123581321");

            } catch (SQLException sqlex) {
                sqlex.printStackTrace();
            } catch(ClassNotFoundException cnfex) {
                cnfex.printStackTrace();
            }
            return conexion;
        }
        else {
            return conexion;
        }
    }

}

 

해결 방법

 

연결이 닫히면 임시 테이블이 자동으로 삭제됩니다.


테이블을 만들 때 TEMPORARY 키워드를 사용할 수 있습니다. TEMPORARY 테이블은 현재 연결에만 표시되며 연결이 닫히면 자동으로 삭제됩니다. 이는 두 개의 서로 다른 연결이 서로 충돌하지 않고 또는 동일한 이름의 기존 비 TEMPORARY 테이블과 동일한 임시 테이블 이름을 사용할 수 있음을 의미합니다. (임시 테이블이 삭제 될 때까지 기존 테이블은 숨겨집니다.)

일부 작업을 수행하기 위해 임시 테이블을 생성하려면 작업을 시작할 때 생성하고 이에 대해 UPDATE / SELECT 문을 실행해야합니다. 연결을 닫으면 자동으로 삭제되며 동일한 임시 테이블 이름을 사용하는 다른 연결과 충돌하지 않습니다.

 

참조 페이지 https://stackoverflow.com/questions/10143649

 

 

반응형

댓글