Вывод результатов SQL-запроса в плоский файл с Java - PullRequest
0 голосов
/ 13 декабря 2008

Существует ли в Java простой или прямой способ вывода результатов запроса к базе данных в файл (csv, tab и т. Д.). Возможно, даже в Hibernate?

Я знаю, что результаты запроса могут быть сохранены в плоский файл на сервере БД. Я ищу способ, которым приложение может выполнить запрос и получить эти результаты в файл.

Я понимаю, что один из вариантов - просто перебрать набор результатов и вывести записи по одной строке за раз, разделяя их разделителем. Но если есть встроенный способ или способ Hibernate - это было бы намного лучше!

То, что я действительно искал, это способ сделать это в коде (например, когда приложение запущено). Таким образом, сервер может принять запрос, выполнить его для базы данных и отправить вывод в простой файл.

Сервер, отправляющий запрос, на самом деле не нуждается в самом файле, просто чтобы знать, как он работает. Поэтому, если есть SQL (для БД Oracle), который может перенаправить вывод в плоский файл в каталоге, к которому у сервера БД Oracle есть доступ - это тоже будет работать. На самом деле мне не нужно писать файл на Java-сервере - просто запустите создание файла на основе запроса, который у него есть.

Надеюсь, это имеет смысл.

Ответы [ 4 ]

1 голос
/ 16 декабря 2008

Вы можете изменить EntityMode вашего сеанса на «DOM4J», чтобы Hibernate возвращал данные, представленные в виде XML-документа, вместо графика POJO.

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

Вы можете легко записать это в файловую систему или выполнить последующие преобразования.

0 голосов
/ 08 мая 2013

также меняется на

for( int i = 1; i < cols ; i++ ) { 
         out.printf("%s,", rs.getObject( i ) );
      }   
0 голосов
/ 08 января 2009

Я понимаю, что один из вариантов - просто выполнить итерацию по набору результатов и вывести записи по одной строке за раз, разделяя их разделителем. Но если есть встроенный способ или способ Hibernate - это было бы намного лучше!

Нет, нет. Но это очень просто:

  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), который может перенаправить вывод в плоский файл в каталоге, к которому имеет доступ сервер БД Oracle - это тоже будет работать

Я думаю, что это действительно возможно. Но я уже несколько лет не могу быть администратором, поэтому не знаю, «как» это сделать.

0 голосов
/ 13 декабря 2008

Кажется, я помню, что в IntelliJ JDBC db explorer была возможность экспортировать результаты запросов. Я не удивлюсь, если плагин Eclipse или Netbeans DB сможет сделать то же самое. Вот целая куча клиентов с открытым исходным кодом .

Существует также JdbcTool , который является клиентом командной строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...