0

JavaでDBクエリの結果をファイル(csv、タブなど)に出力する簡単または簡単な方法はありますか?おそらくHibernateでも?

クエリ結果をDBサーバー上のフラットファイルにダンプできることを知っています。アプリケーションがクエリを実行し、それらの結果をファイルに取り込む方法を探しています。

1つのオプションは、結果セットを繰り返し処理し、区切り文字で区切って一度に1行ずつレコードを出力することです。しかし、組み込みの方法、またはHibernateの方法がある場合、それははるかに優れています!

私が本当に探していたのは、これをコードで行う方法でした(たとえば、アプリケーションが実行されているとき)。このようにして、サーバーはクエリを取得し、データベースに対して実行し、出力をフラットファイルに送信できます。

クエリを送信するサーバーは、ファイルが機能したことを知るためだけに、ファイル自体を実際に必要としません。したがって、Oracle DBサーバーがアクセスできるディレクトリ内のフラットファイルに出力をリダイレクトできるSQL(Oracle DBの場合)がある場合は、それも機能します。実際にJavaサーバーにファイルを書き込む必要はありません。ファイルのクエリに基づいてファイルの作成をトリガーするだけです。

うまくいけば、それは理にかなっています。

4

4 に答える 4

1

セッションの EntityMode を「DOM4J」に変更して、Hibernate が POJO グラフではなく XML ドキュメントとして表されるデータを返すようにすることができます。

xmlSession = session.getSession(EntityMode.DOM4J);
Element elem = (Element) xmlSession.load(SomePersistentClass.class, id);
System.out.println(elem.asXML());

その後、これをファイル システムに簡単に書き込んだり、その後の変換を実行したりできます。

于 2008-12-16T19:13:51.277 に答える
0

IntelliJのJDBCデータベースエクスプローラーがクエリの結果をエクスポートする機能を持っていたことを覚えているようです。EclipseまたはNetbeansDBプラグイン、または同じことができる場合でも、私は驚かないでしょう。これがたくさんのオープンソースクライアントです。

コマンドラインクライアントであるJdbcToolもあります

于 2008-12-12T23:28:14.593 に答える
0

1 つのオプションは、結果セットを反復処理し、一度に 1 行ずつ区切り記号で区切ってレコードを出力することです。しかし、組み込みの方法または休止状態の方法があれば、それははるかに良いでしょう!

いいえ、ありません。しかし、それはとても簡単です:

  public void printToFile( ResultSet rs, String path ) throws IOException { 

     PrintStream out = new FileOutputStream( path );

     int cols = rs.getMetaData().getColumnCount();

     while( rs.next() ) { 
         for( int i = 0; i < cols ; i++ ) { 
             out.printf("%s,", rs.getObject( i ) );
          }           
          out.println();
     }

     // add exception handling and such...
     // or move the from here.
     out.close();
     rs.close();

 }

そして、次のように呼び出します。

 ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
 printToFile( rs, "/some/file" );

これはゼロからのものです。ファイルの終了と rs をより意味のあるものに移動する必要があります。

したがって、Oracle DBサーバーがアクセスできるディレクトリ内のフラットファイルに出力をリダイレクトできるSQL(Oracle DB用)がある場合、それも機能します

これは確かに可能だと思います。しかし、私は DBA になるには何年もかからないので、その「方法」がわかりません。

于 2009-01-08T01:02:30.733 に答える