2016-08-24 3 views
2

다음 코드를 사용하여 postgreSQL 테이블을 변경하려고합니다.SQLGrammerException : 문을 실행할 수 없습니다

String query = "ALTER TABLE \"georbis:world_boundaries\" DROP COLUMN testcolumn"; 
sessionFactory.openSession().createSQLQuery(query).executeUpdate(); 

문제는 내 테이블 이름에 콜론 (:)이 포함되어있어 다음과 같은 오류가 발생합니다. 비슷한 질문

ERROR: unterminated quoted identifier at or near ""georbis? DROP COLUMN testcolumn" at character 13 
STATEMENT: ALTER TABLE "georbis? DROP COLUMN testcolumn 

다른 답변은 내가 노력 테이블 이름을 큰 따옴표 (")를 넣어하지만 여전히 같은 오류을 받고해야하는 것이 좋습니다. 또한

전에서 같은 쿼리를 실행 . SQL 편집기가 완벽하게 잘 작동 은 또한 콜론을 포함하지 않는 테이블 (동일한 쿼리를 실행하려고 :) 그리고 일

해결 방법 :.. 감사합니다 모두 HERE에서 답을 얻었다3210 이렇게 쿼리가 바뀌 었습니다.

String query = "ALTER TABLE \"georbis\\:world_boundaries\" DROP COLUMN testcolumn"; 
+2

자바 파서는': word_boudaries'를 쿼리 매개 변수의 자리 표시 자로 가져옵니다. 어쩌면 세미콜론에서 벗어나려고 노력할 것입니다 (저는 자바를 사용하지 않습니다). – klin

+1

@Neelesh 질문에 대한 답을 얻을 수 있습니다. 솔루션 파트를 질문으로 제시하는 대신 대답으로 추가하는 것이 좋습니다. 그리고 48 시간이 지나면 자신의 대답을 받아 들일 수 있습니다. 다른 한편, 귀하의 질문이 그 질문과 중복되는 경우, 그렇게 표시하십시오. –

답변

2

":"은 명명 된 매개 변수에 대한 프롬프트입니다. ORM 세션에서 직접 쿼리를 실행하면 ORM이 구문 분석을 시도하여 변환합니다.

사용하는 가정 최신 최대 절전 모드 Sessionthis 대답은 설명대로, 낮은 수준 (JDBC 연결)에서 쿼리를 실행해야합니다

말했다되고 그건
sessionFactory.openSession().doWork(
    new Work() { 
     public void execute(Connection connection) throws SQLException 
     { 
      try(Statement stmt=connection.createStatement()){ 
       stmt.executeUpdate("ALTER TABLE \"georbis:world_boundaries\" DROP COLUMN testcolumn"); 
      } 
     } 
    } 
); 

, 당신에게 절대적으로 확신 당신 ORM에서 DDL을 실행 하시겠습니까? 거기에 다른 해결책이 있습니다. 프로젝트가 Maven 인 경우 SQL Maven plugin을 사용하여 테스트를 위해 SQL 설정을 분리 할 수 ​​있습니다.

관련 문제