0

Java中是否有一种简单或直接的方法将数据库查询的结果输出到文件(csv、tab等)。甚至在 Hibernate 中?

我知道查询结果可以转储到数据库服务器上的平面文件中。我正在寻找一种应用程序可以运行查询并将这些结果放入文件的方法。

我意识到一种选择是只遍历结果集并一次输出一行记录,并用分隔符分隔。但是如果有一个内置的方式,或者一个休眠方式——那就更好了!

我真正在寻找的是一种在代码中执行此操作的方法(例如 - 当应用程序运行时)。这样,服务器可以接受查询,针对数据库运行它,将输出发送到平面文件。

发送查询的服务器并不真正需要文件本身,只需要知道它是否有效。因此,如果有 SQL(对于 Oracle DB)可以将输出重定向到 Oracle DB 服务器有权访问的目录中的平面文件 - 那也可以。我真的不必在 Java 服务器中实际编写文件 - 只需根据它的查询触发文件创建。

希望这是有道理的。

4

4 回答 4

1

You can change the EntityMode of your Session to "DOM4J" so that Hibernate will return the data represented as an XML document instead of a POJO graph.

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

You could then easily write this to the file system or do subsequent transformations.

于 2008-12-16T19:13:51.277 回答
0

我似乎记得 IntelliJ 的 JDBC 数据库浏览器能够导出查询结果。如果 Eclipse 或 Netbeans DB 插件或可以做到这一点,我不会感到惊讶。这是一大堆开源客户端

还有JdbcTool,它是一个命令行客户端

于 2008-12-12T23:28:14.593 回答
0

我意识到一种选择是只遍历结果集并一次输出一行记录,并用分隔符分隔。但是如果有一个内置的方式,或者一个休眠方式——那就更好了!

不,那里没有。但这容易:

  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 的关闭移动到更有意义的位置。

因此,如果有 SQL(对于 Oracle DB)可以将输出重定向到 Oracle DB 服务器有权访问的目录中的平面文件 - 那也可以

我认为这确实是可能的。但是我距离成为 DBA 还差几年,所以我不知道“如何”去做。

于 2009-01-08T01:02:30.733 回答
0

也改为

for( int i = 1; i < cols ; i++ ) { 
         out.printf("%s,", rs.getObject( i ) );
      }   
于 2013-05-08T19:59:33.847 回答