2015-01-02 7 views
0

간단한 SQL 작성 문에서 일부 데이터를 추출해야합니다. 나는 그 목적을 위해 정규 표현식을 사용하기로 결정했다. NOT NULL/NULL이 아닌 istead를 넣을 때까지 "nullability"을 지정하지 않으면 모든 것이 정상입니다 (의도 한대로 그룹에서 null을 반환 함). NOT을두면 columnname을 건너 뜁니다.regex를 사용하여 sql create 문에서 데이터 추출

나는 다음과 같은 코드를 가지고 (기압에만 인쇄가 포함되지 이벤트 추출 된 데이터를 처리) (문 다르게 포맷 할 수 있기 때문에 수평선에서 발견 사용)

String input = "CREATE TABLE IF NOT EXISTS Types_of_classes(" 
    + "columnname INTEGER NOT PRIMARY KEY," 
    + "name TEXT," 
    + "name2 datatype);"; 
    Scanner s = new Scanner(input); 
    s.findWithinHorizon("\\s*CREATE\\s+TABLE(?:\\s+IF\\s+NOT\\s+EXISTS)?\\s+(\\w+)[(]",input.length()); 
    MatchResult result = s.match(); 
    if (1 < result.groupCount()) 
     return; 
    System.out.println(result.group(1));//printing tablename 
    s.findInLine("\\s*(\\w+)\\s+(\\w+)(?:\\s+((?:NOT)?NULL)?)?(?:\\s+(PRIMARY KEY)?)?,"); 
    //there will be added somethind in that regexp to handle FK's too 
    result = s.match(); 
    for (int i = 1; i <= result.groupCount(); i++) 
     System.out.println(result.group(i)); 
    s.close(); 

출력 :

Types_of_classes 
INTEGER 
NOT 
null 
PRIMARY KEY 

전체 추출에 대한 조언도 환영합니다! 필요

+1

나는 ** 당신이 이것을하고있는 이유는 무엇입니까? 당신이하려고하는 것은 무엇입니까 (큰 그림)? 데이터베이스에서 사용되는 유형의 목록을 원하면 정보 스키마 테이블 다음에 행운을 빕니다. db가이 모든 정보를 수집 할 것입니다. –

+0

@ Clockwork-Muse 조언을 해주신 것에 대해 감사드립니다. 목적은 java의 클래스에 SQL 테이블을 매핑하는 것입니다. 정보 스키마가 null 또는 not null 데이터를 제공하지 않습니다. idk 키는 어떻습니까? – Rotek

+0

당신의 RDBMS가 무엇인지에 달려 있을지도 모르겠지만, 당연히해야 할 것은 - 어떤 테이블에 제약 조건 정보가 들어 있는지 확인하고 시작하는 것입니다. 이 정보가 없다면 어떻게 CREATE TABLE 문을 얻고 있는가? 다음 문제 - 테이블과 클래스는 일반적으로 완벽하게 매핑되지 않으며, 적어도 잘 디자인 된 시스템에서는 매핑되지 않습니다. 주요 관계는 대개 거꾸로됩니다. - OO에서는 부모가 자식 개체 모음을 갖지만 db에서는 자식이 부모에 대한 참조를 갖습니다. 출력을 감사하십시오 ... 그리고 어쨌든 이것을 이미 터뜨릴 라이브러리가있을 것입니다. –

답변

0

두 번째 정규 표현식의 NULL 부분이 필요하게하는 방식으로 작성되며, NOT 후 공간이 당신이 그것의 \s+ 뿅을 넣어 때문에 PRIMARY KEY이 일치하지 단어를 만드는 방식으로 작성되어, 적어도 하나의 공간 (NOT 후 공간과 일치 된), 여기에 PRIMARY KEY 열 부분

\s*CREATE\s+TABLE(?:\s+IF\s+NOT\s+EXISTS)?\s+(\w+)[(]\s*(\w+)\s+(\w+)(?:\s+((?:NOT)?(?:NULL)?)?)?(?:\s+(PRIMARY KEY)?)?, 

이 재생을위한 훌륭한 대화 형 사이트입니다까지 일치하는 수정 정규식 (첫 번째와 두 번째 정규 표현식에 둘의 조합)입니다 정규식 검색을 통해 진행 상황을 설명합니다.

https://regex101.com/

관련 문제