2017-02-03 2 views
0

간단한 CSV 파일을 HSQL 데이터베이스의 소스로 가져 오려고합니다. 가 나는 다음과 같은 오류가 날짜에 차단하고 있습니다 :CSV 테이블 소스가있는 HSQLDB - 날짜 형식이 허용되지 않습니다.

Exception in thread "main" java.sql.SQLException: bad TEXT table source file - line number: 1 org.hsqldb.HsqlException: data exception: invalid datetime format in statement [SET TABLE Patient SOURCE "queryDbTest.csv;fs=,;vs=,"] 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) 

나는 많은 변화를 시도, 모두가 같은 오류로 실패했습니다. 파일이 읽히고, 그것을 디버깅하는 데 올바른 날짜 형식으로 이해하고있는 날짜까지 구문 분석에 실패하는 것을 볼 수 있습니다.

  1. 대신
  2. 을 입력 '날짜 시간'을 사용하여 컬럼으로 :

    System.setProperty("textdb.allow_full_path", "true"); 
    
        Class.forName("org.hsqldb.jdbcDriver"); 
        Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", ""); 
    
        Statement st = conn.createStatement(); 
        st.execute("CREATE TEXT TABLE Patient (" + 
            "HospitalNumber VARCHAR(100), " + 
            "NHS_Number VARCHAR(100), " + 
            "Name VARCHAR(100), " + 
            "other_names VARCHAR(100), " + 
            "dob Date, " + 
            "address VARCHAR(200))"); 
    
        st.execute("SET TABLE Patient SOURCE \"" + "queryDbTest.csv" + ";all_quoted=true;fs=,;qc=\\quote\""); 
    

    을 다음과 내 CSV로

    내 코드는 내가 시도

    '1234', 'N998877', 'Smith', 'Mary', '1999-12-01', 'an address 1' 
    

    변형을 포함입니다 CSV 파일에서 DateTime 형식 사용 (i..e, yyyy-MM-dd)HH : MM : SS)

  3. CSV (즉, YYYY-MM-DD HH 의 타임 스탬프 형식을 사용 : mm : ss.SSSSS)
  4. CSV에서 한 날짜 값으로 널 사용. 모든 경우에서 csv 파일

에서 날짜 값 이전 단어 'DATE'와

  • , 나는 동일한 결과 .... 날짜 형식에 대한 불만을 얻을.

    저는 hsqldb-2.3.4를 사용하고 있습니다.

    아이디어가 있으십니까?

  • +0

    fredt – svaens

    답변

    0

    TEXT 테이블 원본 파일에서 DATE 열은 DATE라는 단어가없는 데이터 문자열이어야합니다.

    '1234', 'N998877', 'Smith', 'Mary', '1999-12-01', 'an address 1' 
    

    당신이 인용 문자로 작은 따옴표를 사용하고, 당신은 당신이 비에 테이블 텍스트 소스를 설정하여 예상되는 형식을 볼 수있는 qc

    st.execute("SET TABLE Patient SOURCE \"" + "queryDbTest.csv" + ";all_quoted=true;fs=,;qc=\\apos\""); 
    

    로 지정해야 기존 파일을 읽고 JDBC를 사용하여 단일 행의 데이터를 삽입하고 커밋합니다. 행은 사용자가 설정 한 형식 변수를 사용하여 새 파일에 저장됩니다.

    +0

    에서 제안한 후 가장 최근 시도를 반영하도록 위의 예제 코드를 수정했습니다. 답장을 보내 주셔서 감사합니다. 사실, 출처의 'DATE'단어는 내 많은 시도 중 하나의 인공물이었습니다. 나는 그것을 제거하고 불행히도 사물을 바꾸는 것처럼 보이지 않는다. 나는 또한 당신이 제안한 것처럼 qc 옵션을 사용하여 시도했지만, 아무 소용이 없다. 시도는 다음과 같습니다. st.execute ("SET TABLE Patient SOURCE \" "+"queryDbTest.csv "+"; all_quoted = true; fs = ,; qc = \ quote \ ""); 단일 이스케이프는 컴파일되지 않습니다. – svaens

    +0

    대답을 – fredt

    +0

    나는 소스에 존재하지 않는 파일 경로를 사용하여 시도했다. "SET TABLE Patient"명령을 실행하면 파일이 존재하지 않는다는 예외가 발생합니다. 아마 내가 위에서 설정 한 속성 (textdb.allow_full_path)과 관련이 있다고 생각하여 그 행을 주석 처리했습니다. 그 후에 그것은 "CREATE TEXT TABLE"문장에서 이미 예외를 던진다! 내가 보는 것과 당신이 보는 것 사이의 불일치의 원인이 무엇인지 궁금합니다. – svaens

    관련 문제