ResultSet metadata getTableName возвращает пустую строку

#java

#java

Вопрос:

Я пытаюсь получить имя таблицы из ResultSetMetaData следующим кодом

         Class.forName("oracle.jdbc.driver.OracleDriver");
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
         conn = DriverManager.getConnection(url,"releaseUN", "releasepw");
        Statement stmt = conn.createStatement();
        String qry = "";
        qry = "  SELECT  *  FROM MyTable ";
        
        ResultSet rset = stmt.executeQuery(qry);
        ResultSetMetaData md = rset.getMetaData();
        int col = md.getColumnCount();
        
         for (int i = 1; i <= col; i  ) {
            System.out.println("getTableName "  md.getTableName(i));
     
         }
  

Но он возвращает пустую строку
Я использовал ojdbc14.jar для подключения к базе данных Oracle с помощью подключения jdbc

На самом деле мне нужно имя таблицы для каждого выбранного столбца в данном запросе.

Комментарии:

1. Не могли бы вы показать нам немного больше из вашего кода? Запрос на подключение и так далее?

2. Вы уверены, что String url = "jdbc:oracle:thin:@localhost:1521:orcl"; это правильно! Я думаю orcl , его следует заменить на XE.

3. да, шекхар, orcl верен, когда я использую xe, он выдает ошибку java.sql.SQLException: слушатель отказался от соединения

4. вы уверены, что ваше соединение устанавливается?? попробуйте создать исключение, окружив его try catch

5. Да, сэр, соединение устанавливается, я могу распечатать данные столбца с помощью этого кода, пока (rset.next()) { System.out.println(rset.getString(1)); }

Ответ №1:

В документации ResultSetMetaData говорится, что она возвращает пустую, если это не применимо.

 String getTableName(int column)
                    throws SQLException 
Gets the designated column's table name.
 Parameters:column - the first column is 1, 
the second is 2, ... 
Returns:table name or "" if not applicable 
Throws: SQLException - if a database access error occurs
  

Комментарии:

1. точно, Дженс, его перенастройка пустой (пустой строки) для меня, некоторые ребята могут получить имя таблицы из того же метода, но для моей стороны это не работает, какое-либо другое решение, Дженс?

2. @Kamal В документации ничего не говорится о том, что означает «неприменимо». Возможно, вам нужны специальные разрешения или это зависит от СУБД.

3. @Kamal или посмотрите здесь «К сожалению, getTableName не реализован драйвером. Если вы подумаете об этом, это не очень просто реализовать, учитывая возможную сложность sql-запроса. »

4. Я прошел по ссылке, которую вы дали, и они сказали, что для этого метода нет реализации, в любом случае ценю вашу помощь, Дженс