2017-02-03 6 views
0

HSQLデータベースのソースとしてシンプルなCSVファイルを取得しようとしています。 私は、次のエラーを取得し、日付でブロックされています: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. を:

      私のコードは、私が試してみました

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

      バリエーションが含ま

      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 CSVファイルでのDateTime形式の使用(i..e、yyyy-MM-dd のHH:MM:SS)

    2. CSV(すなわち、YYYY-MM-DD HHにおけるタイムスタンプ形式を使用した:MM:ss.SSSSS)
    3. 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を使用して1行のデータを挿入してコミットすることができます。行は、設定した書式変数で新しいファイルに保存されます。

    +0

    こんにちは、返信ありがとうございます。実際、ソースの「DATE」という単語は、私の多くの試みの1つのアーティファクトでした。私はそれを削除し、それは残念ながら物事を変更するようではありません。私はあなたが示唆したように、qcオプションを使って試しましたが、無駄です。試してみると、st.execute( "SET TABLE Patient SOURCE \" "+" queryDbTest.csv "+"; all_quoted = true; fs =、;;;;;;);単一のエスケープはコンパイルされません。 – svaens

    +0

    答えを – fredt

    +0

    ソースに存在しないファイルパスを使用しようとしました。 "SET TABLE Patient"コマンドを実行すると、ファイルが存在しないと言う例外がスローされます。私はおそらく、私が上に設定したプロパティ(textdb.allow_full_path)と関係があると思ったので、その行をコメントアウトします。その後、すでに "CREATE TEXT TABLE"ステートメントで例外がスローされます。私はあなたが見ているものと見ているものとの間の矛盾の原因が何であるのだろうかと思います。 – svaens

    関連する問題