2016-03-30 19 views
2

Oracle 11g Enterprises Editionデータベースを作成しています。データベーステーブルからデータを取得する必要があります。[email protected]の値を取得するには

  • TIMESTAMPLTZ

他のすべてのデータの種類とその値が正常にフェッチされ

  • TIMESTAMPTZ:データベーステーブルは、列のこれらのタイプのいずれかを持っています。

    私たちはapache meta-modalを使用してデータベーステーブルを解析し、それを使用してCSVを生成しています。

    我々は行に対してこの方法を使用している:

    row.getValues()[indexColumn] 
    

    をこのコードは、文字列として[email protected]オブジェクトを返す、指定された行のカラムの値を取得しません。私たちはその価値が必要です。

    キャストするのはです。TIMESTAMPLTZキャスト以外は例外です。また、columnValue.timestampValue()も意味をなさない。

    コンパイルされた方法でApacheメタモデルを使用して、列タイプTIMESTAMPLTZの値を取得するにはどうすればよいですか。

  • +0

    すでに他のデータ型を扱うことができる場合は、[TIMESTAMPLTZを使用することはできませんメソッド](https://docs.oracle.com/database/121/JAJDB/oracle/sql/TIMESTAMPLTZ.html)を使用して、日付などに変換して、CSV用にフォーマットできますか?または、その形式が許容される場合は文字列としても使用できますか? –

    答えて

    3

    [email protected]」のようなものが出力されている場合は、oracle.sql.TIMESTAMPLTZオブジェクトのコードを明示的または暗黙的に呼び出す必要があります。

    TIMESTAMPLTZクラスがtoString()をオーバーライドしないため、これはあなたに何も読めるものではありません。あなたが見ているのは、デフォルトのObject.toString()メソッドが提供するものです。

    TIMESTAMPLTZは実際には日付を何らかの形でラップする日付変換器/アダプタです。 TIMESTAMPLTZインスタンスを使用する方法は、インスタンスメソッドの1つを呼び出すことです。たとえば、TIMESTAMPLTZオブジェクトのdateValue(Connection)を呼び出すと、ラップされたOracle内部日付がJava Dateオブジェクトに変換されます。他のインスタンスメソッドは、文字列、バイト配列、およびJDBCの日付/時刻クラスに変換されます。

    (クラスは静的変換メソッドの束を持っていますが、私はそれはあなたがここに必要なものではないと思います。)

    +0

    ありがとうございました。今私はdateValueを使用してDateを取得することができます。これはyyyy-MM-dd HH:mm:ss.SSS形式ですが、このCSVを使用して値を復元する必要があるため、 oracleの別のデータベース。復元時にORA-01843のエラーがスローされます。日付の形式のため、有効な月ではありません。私はSimpleDateFormatで1つの修正日付形式を使用することはできませんが、これは正しい形式で日付の形式を取得するためにoracle dbに保存されている私のcsvにはありません。 –

    +0

    実際には、日付はバイナリ形式でデータベースに格納されます。実際の問題は、Oracleが行っている文字列とバイナリの変換にあります。 Oracle SQLのフォーマット・モデルに関するドキュメント(https://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements004.htm)を参照してください。固定されたSimpleDateFormatと一致するDate Modelを使用すると、一貫して動作するようにすべてを得ることができるはずです。 –

    +0

    TIMESTAMPLTZ columnValue =(TIMESTAMPLTZ)row.getValues()[pos];日付日付= columnValue.dateValue(接続);文字列formattedDate =新しいSimpleDateFormat( "dd-MMM-yy hh.mm.ss.SSSSSSSS a")。書式(日付); .. columnValue.dateValue(接続)日付は16-02-2016 11:22にのみ返されます。 06秒までですが、私のdbではマイクロ秒とタイムゾーンまでです。だから私の望ましいフォーマットに変換しても正しい結果が得られません。 –

    関連する問題