Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Java+Oracle 
:(
    Опции темы
Abeke
Дата 15.8.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Не могу понять в чём дело...
Помогите пожайлуста.
Не могу открыть получившиеся XLS-файлы . Пишет , что файл невозможно прочитать.
Кроме того после нажатия кнопки (обработчик fButton.addActionListener(new ActionListener() {)  выдаёт сообщения:

        at oracle.jdbc.ttc7.Oopen.receive(Oopen.java)
        at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java)
        at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java)
        at oracle.jdbc.driver.OracleConnection.privateCreateStatement(OracleConn
ection.java)
        at oracle.jdbc.driver.OracleConnection.createStatement(OracleConnection.
java)
        at JavX1$1.actionPerformed(JavX1.java:135)
        at java.awt.Button.processActionEvent(Unknown Source)
        at java.awt.Button.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
TABLE_CAT
TABLE_CAT,TABLE_SCHEM
TABLE_CAT,TABLE_SCHEM,TABLE_NAME
TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE
SELECT TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE FROM SA_PGAM
java.sql.SQLException: ORA-01000: maximum open cursors exceeded

        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
        at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java)

Итак для каждой таблицы.


Фрагмент кода:
Код

public static void main(String [] args ) throws SQLException {
    
       { 
            

             try{ 
        
  
             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
             conn = DriverManager.getConnection
             ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
             checkForWarning (conn .getWarnings ()); 
             Statement stmt = conn.createStatement();
             DatabaseMetaData dbmd = conn.getMetaData();
             
             String [] types = {"TABLE"};
  
             ResultSet rs = dbmd.getTables(null, null, null, null);

            printResultSet(rs);
 
             }

             catch( SQLException ex ) {
                       ex.printStackTrace();

             }
         

         JavX1ApplicationFrame theApplication = new JavX1ApplicationFrame(
         "Vend-------Таблицы!");
         theApplication.setSize(600, 450);
         theApplication.show();

       };
    }
    
    public void init()  {
        setLayout(new BorderLayout());
        setBackground(java.awt.Color.white);
        theNORTHPanel=new Panel();
        theCenterPanel=new Panel();
        theSouthPanel=new Panel();
        fileCombo = new List(4);
   
       theSouthPanel.add(fileCombo );
       
       add(theSouthPanel, BorderLayout.SOUTH); 
        
        
        theChoice = new Choice();
        theNORTHPanel.add(theChoice);
        fLabelForTextField = new java.awt.Label();
       add(theNORTHPanel, BorderLayout.NORTH); 
       
        add(fLabelForTextField, BorderLayout.CENTER);


        fButton = new Button("Соединение");
        fButton.setBackground(java.awt.Color.green);
        theCenterPanel.add(fButton);
        add(theCenterPanel, BorderLayout.CENTER); 

             
        fButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e)  {
               
                       try{
                       DatabaseMetaData dbmd = conn.getMetaData();
                       ResultSet rs = dbmd.getTables(null, null, null, null);
                       ResultSetMetaData meta = rs.getMetaData();     
               
                                        while(rs.next()) {
                                                   try{ 
                                                          WritableWorkbook workbook = Workbook.createWorkbook(new File(rs.getString("TABLE_NAME")+".xls")); 
                                                          WritableSheet sheet = workbook.createSheet("First Sheet", 0); 
                                                             columns1 = new String[meta.getColumnCount()];
                                                             for(int i = 1; i < columns1.length; i++) {
                                  
                                                                    columns1[i] = meta.getColumnName(i );
                                                             }
                                                             zaprStrok="";
                                                             for(int i = 1; i < columns1.length; i++) {

                                                                   jxl.write.Label label = new jxl.write.Label(2+i,3 , columns1[i]); 
                                                                   sheet.addCell(label); 
                                                                           if (i==1) {
                                                                           zaprStrok=zaprStrok+columns1[i];
                                                                           System.out.println (zaprStrok);
                                                                           }
                                                                           else {
                                                                           zaprStrok=zaprStrok+","+columns1[i];
                                                                           System.out.println (zaprStrok);
                                                                           }
                                                             }
                                                             System.out.println ("SELECT "+zaprStrok+" FROM "+rs.getString("TABLE_NAME"));
                                                             Statement st = conn.createStatement();
                                                             
                                                             ResultSet rs1= st .executeQuery("SELECT "+zaprStrok+" FROM "+rs.getString("TABLE_NAME"));
                                                             
                                                             j = 4;
                                                             while(rs1 .next()) {
                                                                               for(int i = 1; i < columns1.length; i++) {
                                             
                                                                                     jxl.write.Label label = new jxl.write.Label(2+i,j  , rs1.getString(columns1[i]) ); 
                                                                                     sheet.addCell(label); 
                                                                              }
                                                                              j=j+1;
                                                             }
                                                           
                                                           workbook.write(); 
                                                           workbook.close(); 
                                                           theChoice.addItem(rs.getString("TABLE_NAME"));
                                                   }          
                                                    catch( Exception ex ) {
                                                    ex.printStackTrace();

                                                    }
                                        }
                            
                       }
                       catch( SQLException ex ) {
                       }
                     
             }
        }); 


Спасибо!
PM   Вверх
LSD
Дата 15.8.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



После того как ты поработал с ResultSet и Statement, их нужно закрывать close().


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
batigoal
Дата 15.8.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



А где у тебя, собственно, вызывается init? 

Цитата(Abeke @  15.8.2006,  14:59 Найти цитируемый пост)
java.sql.SQLException: ORA-01000: maximum open cursors exceeded

Смахивает на косяк в администрировании базы. Можно увеличить максимальное кол-во открытых курсоров.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 15.8.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Цитата

А где у тебя, собственно, вызывается init? 

   
Строка 38
Или не то?
PM   Вверх
LSD
Дата 15.8.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Abeke @  15.8.2006,  15:16 Найти цитируемый пост)
Или не то?

Не то. Это место где он объявлен.

Впрочем это не важно, просто добавь закрытие курсора:
Код
Statement st = conn.createStatement();
ResultSet rs1= st .executeQuery("SELECT "+zaprStrok+" FROM "+rs.getString("TABLE_NAME"));
j = 4;
while(rs1 .next()) {
  for(int i = 1; i < columns1.length; i++) {
    jxl.write.Label label = new jxl.write.Label(2+i,j  , rs1.getString(columns1[i]) );
    sheet.addCell(label);
  }
  j=j+1;
}
workbook.write();
workbook.close();
rs1.close();
st.close();
....
rs.close();



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Abeke
Дата 15.8.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Цитата

Можно увеличить максимальное кол-во открытых курсоров. 

  Не подскажете где это можно сделать?


PM   Вверх
batigoal
Дата 15.8.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Abeke @  15.8.2006,  15:29 Найти цитируемый пост)
 Не подскажете где это можно сделать?

Лучше попробуй ликвидировать ошибку в программе, а уже потом мы пойдем в администрирование базы  smile 
В противном случае никакое максиммальное количество тебя не спасет.

Это сообщение отредактировал(а) Lamer George - 15.8.2006, 14:34


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 15.8.2006, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



   Поприкрывал, позакрывал , как сказали 

Код

    fButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e)  {
               
                       try{
                       DatabaseMetaData dbmd = conn.getMetaData();
                       ResultSet rs = dbmd.getTables(null, null, null, null);
                       ResultSetMetaData meta = rs.getMetaData();     
               
                                        while(rs.next()) {
                                                   try{ 
                                                          WritableWorkbook workbook = Workbook.createWorkbook(new File(rs.getString("TABLE_NAME")+".xls")); 
                                                          WritableSheet sheet = workbook.createSheet("First Sheet", 0); 
                                                             columns1 = new String[meta.getColumnCount()];
                                                             for(int i = 1; i < columns1.length; i++) {
                                  
                                                                    columns1[i] = meta.getColumnName(i );
                                                             }
                                                             zaprStrok="";
                                                             for(int i = 1; i < columns1.length; i++) {

                                                                   jxl.write.Label label = new jxl.write.Label(2+i,3 , columns1[i]); 
                                                                   sheet.addCell(label); 
                                                                           if (i==1) {
                                                                           zaprStrok=zaprStrok+columns1[i];
                                                                           System.out.println (zaprStrok);
                                                                           }
                                                                           else {
                                                                           zaprStrok=zaprStrok+","+columns1[i];
                                                                           System.out.println (zaprStrok);
                                                                           }
                                                             }
                                                             System.out.println ("SELECT "+zaprStrok+" FROM "+rs.getString("TABLE_NAME"));
                                                             Statement st = conn.createStatement();
                                                             
                                                             ResultSet rs1= st .executeQuery("SELECT "+zaprStrok+" FROM "+rs.getString("TABLE_NAME"));
                                                             
                                                             j = 4;
                                                             while(rs1 .next()) {
                                                                               for(int i = 1; i < columns1.length; i++) {
                                             
                                                                                     jxl.write.Label label = new jxl.write.Label(2+i,j  , rs1.getString(i) ); 
                                                                                     sheet.addCell(label); 
                                                                              }
                                                                              j=j+1;
                                                             }
                                                           
                                                           workbook.write(); 
                                                           workbook.close(); 
                                                           rs1.close();
                                                           st .close();
                                                           theChoice.addItem(rs.getString("TABLE_NAME"));
                                                   }          
                                                    catch( Exception ex ) {
                                                    ex.printStackTrace();

                                                    }
                                        }
                                        rs.close();

                            
                       }
                       catch( SQLException ex ) {
                       }
                       
                     
             }
        }); 


, нет обратно выдаёт:

        at oracle.jdbc.ttc7.Oopen.receive(Oopen.java)
        at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java)
        at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java)
        at oracle.jdbc.driver.OracleConnection.privateCreateStatement(OracleConn
ection.java)
        at oracle.jdbc.driver.OracleConnection.createStatement(OracleConnection.
java)
        at JavX1$1.actionPerformed(JavX1.java:135)
        at java.awt.Button.processActionEvent(Unknown Source)
        at java.awt.Button.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
TABLE_CAT
TABLE_CAT,TABLE_SCHEM
TABLE_CAT,TABLE_SCHEM,TABLE_NAME
TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE
SELECT TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE FROM SA_PGAM
java.sql.SQLException: ORA-01000: maximum open cursors exceeded

        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
        at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java)

PM   Вверх
Abeke
Дата 16.8.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



  А вообще когда следует использовать:rs.close()  ,    st .close() ;
 conn.close() ;

Может лучше вообще всегда писать:
 
Код

       DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        conn = DriverManager.getConnection
        ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
        DatabaseMetaData dbmd = conn.getMetaData();
        ResultSet rs = dbmd.getTables(null, null, null, null);
        ResultSetMetaData meta = rs.getMetaData(); 
        . . .    

        rs.close()  ;
        conn.close() ;

А что приблизительно может означать это исключение?
Цитата

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at JavX1$1.actionPerformed(JavX1.java:241)
        at java.awt.Button.processActionEvent(Unknown Source)
        at java.awt.Button.processEvent(Unknown Source)

PM   Вверх
LSD
Дата 16.8.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



NullPointerException обозначает, что ты пытаешься обратится к объекту по ссылке, которой еще не было присвоено значение.

А по поводу первой ошибки дай полный stack trace.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
batigoal
Дата 16.8.2006, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Abeke @  16.8.2006,  17:00 Найти цитируемый пост)
at JavX1$1.actionPerformed(JavX1.java:241)

Ну так посмотри, какая строчка в файле JavX1.java имеет номер 241.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 17.8.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Вот фрагмент немного переделанного кода:

Код

try{                
             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
             conn = DriverManager.getConnection
             ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
             DatabaseMetaData dbmd = conn.getMetaData();
             ResultSet rs = dbmd.getTables(null, null, null, null);
             ResultSetMetaData meta = rs.getMetaData();  
              i127=0;
             while(rs.next()) {
                                          try{   
                                                      i127=i127+1; 
                                                      System.out.println ("["+theChoice.getItemCount()+"]");  
                                                      System.out.println ("["+theChoice.getItem(i1)+"]");  
                                                      System.out.println ("["+rs.getString("TABLE_NAME")+"]");  
                                                      System.out.println ("["+i127+"]");     
                                                      
                                                      if ("["+rs.getString("TABLE_NAME")+"]" == "["+theChoice.getItem(i1)+"]")         
                                                       { 
                                                           System.out.println ("Start222!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                                            try{          
                                                                    workbook = Workbook.createWorkbook(new File(theChoice.getItem(i1)+".xls")); 
                                                                    sheet = workbook.createSheet("First Sheet", 0); 
                                                            }
                                                                          catch( Exception ex ) {
                                                                               ex.printStackTrace();
                                                            }    
                                                            columns1 = new String[meta.getColumnCount()];
                                                             for(int i = 1; i < columns1.length; i++) {
                                  
                                                                      columns1[i] = meta.getColumnName(i );
                                                             } 
                                                             zaprStrok="";
                                                              for(int i = 1; i < columns1.length; i++) {

                                                                   jxl.write.Label label = new jxl.write.Label(2+i,3 , columns1[i]); 
                                                                         try{  
                                                                               sheet.addCell(label); 
                                                                                if (i==1) {
                                                                                     zaprStrok=zaprStrok+columns1[i];
                                                                                     System.out.println (zaprStrok);
                                                                                }
                                                                               else {
                                                                                     zaprStrok=zaprStrok+","+columns1[i];
                                                                                     System.out.println (zaprStrok);
                                                                                }
                                                                          }
                                                                          catch( jxl.write.WriteException ex ) {
                                                                               ex.printStackTrace();

                                                                          }    
                                                             }
                                                        }
                                                        else
                                                        {continue;}
                                             }
                                             catch( Exception ex ) {
                                             ex.printStackTrace();
                                             }    
                                                 
              }
              rs.close();
 }
 catch( SQLException ex ) {
       ex.printStackTrace();
 }  


и вся проблема ,я так понял, вот в этом месте:

Код

if ("["+rs.getString("TABLE_NAME")+"]" == "["+theChoice.getItem(i1)+"]")  { 


В этом месте показывает всё нормально(сисок заполнен , показан текущий элемент выборки):

  
Код

  System.out.println ("["+theChoice.getItemCount()+"]");  
                                                      System.out.println ("["+theChoice.getItem(i1)+"]");  
                                                      System.out.println ("["+rs.getString("TABLE_NAME")+"]");  
                                                      System.out.println ("["+i127+"]");     


но вот производить сравнение почему-то не хочет (даже если вместо списка использовать массив строк)
PM   Вверх
batigoal
Дата 17.8.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Abeke @  17.8.2006,  10:48 Найти цитируемый пост)
но вот производить сравнение почему-то не хочет (даже если вместо списка использовать массив строк) 

Видимо, потому что сроки надо сравнивать не через ==, а через equals().


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 17.8.2006, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Цитата

не через ==, а через equals(). 


Спасибо   smile  помогло !
 
Но вот снова даёт предупреждение:
java.sql.SQLException: ???????????? ?????? ???????: getValidColumnIndex
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java)
        at oracle.jdbc.dbaccess.DBError.check_error(DBError.java)
        at oracle.jdbc.driver.OracleResultSetMetaData.getValidColumnIndex(Oracle
ResultSetMetaData.java)
        at oracle.jdbc.driver.OracleResultSetMetaData.getColumnName(OracleResult
SetMetaData.java)
        at JavX1$1.actionPerformed(JavX1.java:180)
        at java.awt.Button.processActionEvent(Unknown Source)
        at java.awt.Button.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)


Причём сразу же после :
Код

ResultSet rs1= st23.executeQuery("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1));

Хотя с наличием соответствующих полей  (в переменной zaprStrok)  в таблице theChoice.getItem(i1) вроде всё нормально.

Запись полей таблицы theChoice.getItem(i1) в перем. zaprStrok

Код

columns1 = new String[meta.getColumnCount()];
   for(int i = 0; i < columns1.length; i++) {
      columns1[i] = meta.getColumnName(i );
   } 
. . .

for(int i = 0; i < columns1.length; i++) {
if (i==0) {
        zaprStrok=zaprStrok+columns1[i]; }
else {
zaprStrok=zaprStrok+", "+columns1[i];}

PM   Вверх
Abeke
Дата 18.8.2006, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Кстати,
Цитата

Хотя с наличием соответствующих полей  (в переменной zaprStrok)  в таблице theChoice.getItem(i1) вроде всё нормально.

Выводит
select TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE from ALL_CONS_COLUMNS
Для этого предусмотрено:
Код

ResultSet rs1= st23.executeQuery("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1));



PM   Вверх
Alexandr87
Дата 18.8.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



нету колонки с номером 0, по крайне мере в ResultSet. Они начинаются с 1
PM Jabber   Вверх
Abeke
Дата 18.8.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Цитата

нету колонки с номером 0, по крайне мере в ResultSet. Они начинаются с 1

Простите , а как это понять?
Ведь я же задаю ему конкретные условия , о том какие поля на выбрать :
Код

PreparedStatement ps = conn.prepareStatement(("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1)));
ResultSet rs1= ps.executeQuery();


И список полей , которые надо выбрать тоже задан чётко.(Показано выше)
И проверки полей тоже есть , а он всё вемя выдаёт предупреждение:
Цитата

java.sql.SQLException: ORA-00904: invalid column name

PM   Вверх
LSD
Дата 18.8.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Abeke, ты можешь выкинуть из примера работу с екселем и прочее не относящееся к делу, так чтобы его можно было запустить.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Abeke
Дата 21.8.2006, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



   Выкинул и всё равно загвоздка в этом месте :
Код

PreparedStatement ps = conn.prepareStatement(("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1)));
ResultSet rs1= ps.executeQuery();


Код:
Код

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import java.net.URL;
import java.io.*; 
import java.util.Date; 
public class JavX1 extends Applet {
    private Button fButton;
    private List  fileCombo ;
    private static java.awt.Label fLabelForTextField;
    private Checkbox fCheckbox;
    private java.awt.Label fLabelForChoice;
    private Panel theNORTHPanel;
    private Panel theCenterPanel;
    private Panel theSouthPanel;
    public String[] columns1;
    public String[] columns2;
    public Choice theChoice ;
    public static Connection conn ;
    public static Connection conn23 ;
    public static int Kol ;
    public static String zaprStrok ;
    public static int j ;
    public static int i126;
    public static int i127;
 
    public static void main(String [] args ) throws SQLException {
    
       { 
              try{ 
        
  
             DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
             conn = DriverManager.getConnection
             ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
             checkForWarning (conn.getWarnings ()); 
             Statement stmt = conn.createStatement();
             DatabaseMetaData dbmd = conn.getMetaData();
              String [] types = {"TABLE"};
  
             ResultSet rs = dbmd.getTables(null, null, null, null);

            printResultSet(rs);
             rs.close(); 
             stmt.close();  
             
             }

             catch( SQLException ex ) {
                       ex.printStackTrace();

             }
            
         JavX1ApplicationFrame theApplication = new JavX1ApplicationFrame(
         "Vend-------Таблицы!");
         theApplication.setSize(600, 450);
         theApplication.show();

       };
    }
    
    public void init()  {
        setLayout(new BorderLayout());
        setBackground(java.awt.Color.white);
        theNORTHPanel=new Panel();
        theCenterPanel=new Panel();
        theSouthPanel=new Panel();
        fileCombo = new List(4);
   
       theSouthPanel.add(fileCombo );
       
       add(theSouthPanel, BorderLayout.SOUTH); 
        
        
        theChoice = new Choice();
        theNORTHPanel.add(theChoice);
        fLabelForTextField = new java.awt.Label();
       add(theNORTHPanel, BorderLayout.NORTH); 
         add(fLabelForTextField, BorderLayout.CENTER);
        fButton = new Button("Соединение");
        fButton.setBackground(java.awt.Color.green);
        theCenterPanel.add(fButton);
        add(theCenterPanel, BorderLayout.CENTER); 
       theChoice.add("                                                                                                                                ");
      
        fButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e)  {
               
                       try{
                       DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                       conn = DriverManager.getConnection
                       ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
                       DatabaseMetaData dbmd = conn.getMetaData();
                       ResultSet rs = dbmd.getTables(null, null, null, null);
                       ResultSetMetaData meta = rs.getMetaData();    

                      System.out.println ("Start!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                      i126=0;
                                        while(rs.next()) {
                                                   try{  
                                                         theChoice.addItem(rs.getString("TABLE_NAME"));
                                            
                                                     }          
                                                    catch( Exception ex ) {
                                                    ex.printStackTrace();
                                                    
                                                    }    
                                         
                                         }
                                        rs.close();     
                                        
                                        
                       }
                       catch( SQLException ex ) {
                       }  
                        for (int i1=1; i1 <( theChoice.getItemCount()-1); i1++) {                        
                               try{  
                                     
                                      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                                      conn = DriverManager.getConnection
                                       ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
                                       DatabaseMetaData dbmd = conn.getMetaData();
                                        ResultSet rs = dbmd.getTables(null, null, null, null);
                                        ResultSetMetaData meta = rs.getMetaData();  
                                        i127=0;
                                        while(rs.next()) {
                                               try{   
                                                      i127=i127+1; 
                                                      System.out.println ("["+theChoice.getItemCount()+"]");  
                                                      System.out.println ("["+theChoice.getItem(i1)+"]");  
                                                      System.out.println ("["+rs.getString("TABLE_NAME")+"]");  
                                                      System.out.println ("["+i127+"]");     
                                                      
                                                      if (theChoice.getItem(i1).equals(rs.getString("TABLE_NAME"))==true )  { 
                                                           System.out.println ("Start222!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
                                                             columns1 = new String[meta.getColumnCount()];
                                                             for(int i = 1; i < (columns1.length); i++) {
                                  
                                                                      columns1[i] = meta.getColumnName(i).toString();
                                                             } 
                                                             zaprStrok="";
                                                              for(int i =1; i < columns1.length; i++) {
                                                                         System.out.println (columns1[i]);
                                                                              if (i==1) {
                                                                                  zaprStrok=zaprStrok+columns1[i].trim();
                                                                                  System.out.println (zaprStrok);
                                                                              }
                                                                              else {
                                                                                  zaprStrok=zaprStrok+","+columns1[i];
                                                                                  System.out.println (zaprStrok);
                                                                              }
                                                                          }
                                                              }
                                                       }
                                                        else
                                                       {continue;}
                                                }
                                                 catch( Exception ex ) {
                                                    ex.printStackTrace();

                                                }    
                                                 
                                         }
                                         rs.close();
                                         try{ 
                                                
                                                DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                                                conn = DriverManager.getConnection
                                                ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
                                                DatabaseMetaData dbmd239 = conn.getMetaData();
                                                PreparedStatement ps = conn.prepareStatement(("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1)));
                                                System.out.println (columns1[1]+"  "+columns1[2]+"  "+columns1[4]);   
                                                System.out.println (("select "+zaprStrok+" from "+theChoice.getItem(i1)));     
                                                ResultSet rs1= ps.executeQuery();
                                                System.out.println (theChoice.getItem(i1));                  
                                                j = 4;
                                                System.out.println ("["+columns1.length+"]");    
                                                for(int i128 = 2;  i128 <(columns1.length-1); i128++) {
                                                      try{    
                                                            System.out.print ("["+rs1.getString(i128)+"]");  
                                                           
                                                     }
                                                     catch( Exception ex ) {
                                                               ex.printStackTrace();
                                                     }   
                                                     rs1.close();
                                                     ps.close();
                                                }
                                                j=j+1;
                                             
                                                          
                                         }
                                         catch( SQLException ex ) {
                                                 ex.printStackTrace();
                                         }  
                              }
                              catch( SQLException ex ) {
                                  ex.printStackTrace();
                              }  
                              
                      }
                      
             }
        }); 

PM   Вверх
batigoal
Дата 21.8.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Abeke, я искренне пытался разобраться в твоем коде в течение пятнадцати минут, но бросил. Он безобразен. Настоятельно рекомендую покопаться в нем еще раз, выкинуть вложенные конструкции try/catch, и сделать так, чтобы твой код могу скомпилироваться не только у тебя, но и у других. Для этого нужно, как минимум, убрать из него JavX1ApplicationFrame, объяснить, лоткуда взялась переменная i1, понять, почему у тебя dbmd объявляется два раза и т.д. Без этого код становится абсолютно нечитабельным.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 21.8.2006, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



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

Цитата

выкинуть вложенные конструкции try/catch

не могу. При компиляции требует их наличия.

Цитата

откуда взялась переменная i1

строка 91.

Цитата

dbmd объявляется два раза 

Вообще-то больше, но это всё результат попыток разобраться с этой ошибкой.

Вообще-то я хотел узнать , почему подключение к базе и выборка таблиц проходят нормально, но когда дело доходит до формирования запроса 
Код

                                  PreparedStatement ps = conn.prepareStatement(("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1)));
                                  ResultSet rs1= ps.executeQuery();

то он начинает выдавать предупреждение?

Подправленный код:
Код

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import oracle.jdbc.driver.*;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OracleDriver;
import java.net.URL;
import java.io.*; 
import java.util.Date; 

public class JavX1 extends Applet {
    private Button fButton;
    private List  fileCombo ;
    private static java.awt.Label fLabelForTextField;
    private Checkbox fCheckbox;
    private java.awt.Label fLabelForChoice;
    private Panel theNORTHPanel;
    private Panel theCenterPanel;
    private Panel theSouthPanel;
    public String[] columns1;
    public String[] columns2;
    public Choice theChoice ;
    public static Connection conn ;
    public static Connection conn23 ;
    public static int Kol ;
    public static String zaprStrok ;
    public static int j ;
    public static int i126;
    public static int i127;

    public static void main(String [] args ) throws SQLException {
      { 

         DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
         conn = DriverManager.getConnection
         ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
         checkForWarning (conn.getWarnings ()); 
         Statement stmt = conn.createStatement();
         DatabaseMetaData dbmd = conn.getMetaData();
         ResultSet rs = dbmd.getTables(null, null, null, null);
         printResultSet(rs);
         rs.close(); 
         stmt.close();  
         JavX1ApplicationFrame theApplication = new JavX1ApplicationFrame("Vend-------Таблицы!");
         theApplication.setSize(600, 450);
         theApplication.show();
       };
    }
    
    public void init()  {
        setLayout(new BorderLayout());
        setBackground(java.awt.Color.white);
        theNORTHPanel=new Panel();
        theCenterPanel=new Panel();
        theSouthPanel=new Panel();
        fileCombo = new List(4);
        theSouthPanel.add(fileCombo );
       add(theSouthPanel, BorderLayout.SOUTH); 
        theChoice = new Choice();
        theNORTHPanel.add(theChoice);
        fLabelForTextField = new java.awt.Label();
       add(theNORTHPanel, BorderLayout.NORTH); 
       add(fLabelForTextField, BorderLayout.CENTER);
        fButton = new Button("Соединение");
        fButton.setBackground(java.awt.Color.green);
        theCenterPanel.add(fButton);
        add(theCenterPanel, BorderLayout.CENTER); 
       theChoice.add("                                           ");

        fButton.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e)  {
                   try{
                       DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                       conn = DriverManager.getConnection
                       ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
                       DatabaseMetaData dbmd = conn.getMetaData();
                       ResultSet rs = dbmd.getTables(null, null, null, null);
                       ResultSetMetaData meta = rs.getMetaData();    
                       i126=0;
                       while(rs.next()) {
                              theChoice.addItem(rs.getString("TABLE_NAME"));
                       }
                       rs.close();     
                   }
                   catch(SQLException ex ) {
                   }  
                   for (int i1=1; i1 <( theChoice.getItemCount()-1); i1++) {                        
                       try{  
                           DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                           conn = DriverManager.getConnection
                           ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
                           DatabaseMetaData dbmd = conn.getMetaData();
                           ResultSet rs = dbmd.getTables(null, null, null, null);
                           ResultSetMetaData meta = rs.getMetaData();  
                            i127=0;
                            while(rs.next()) {
                               try{   
                                     i127=i127+1; 
                                     if (theChoice.getItem(i1).equals(rs.getString("TABLE_NAME"))==true )  { 
                                            columns1 = new String[meta.getColumnCount()];
                                            for(int i = 1; i < (columns1.length); i++) {
                                                columns1[i] = meta.getColumnName(i).toString();
                                            } 
                                            zaprStrok="";
                                            for(int i =1; i < columns1.length; i++) {
                                                if (i==1) {
                                                    zaprStrok=zaprStrok+columns1[i].trim();
                                                }
                                                else {
                                                   zaprStrok=zaprStrok+","+columns1[i];
                                                }
                                            }
                                    }    
                                    else
                                    {continue;}
                               }
                               catch( Exception ex ) {
                                   ex.printStackTrace();
                               }    
                            }
                            rs.close();
                            try{ 
                                  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
                                  conn = DriverManager.getConnection
                                  ("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
                                  DatabaseMetaData dbmd239 = conn.getMetaData();
                                  PreparedStatement ps = conn.prepareStatement(("SELECT "+zaprStrok+" FROM "+theChoice.getItem(i1)));
                                  ResultSet rs1= ps.executeQuery();
                                  j = 4;
                                  while(rs1.next()) {
                                        for(int i128 = 2;  i128 <(columns1.length-1); i128++) {
                                             System.out.print ("["+rs1.getString(i128)+"]");  
                                        }
                                        j=j+1;
                                  }
                                  rs1.close();
                                  ps.close();
                            }
                            catch( SQLException ex ) {
                                ex.printStackTrace();
                            }  

                       }
                       catch( SQLException ex ) {
                       ex.printStackTrace();
                       }  
                  }
             }
        }); 
    }
    public static void printResultSet(ResultSet rs) throws SQLException {
        ResultSetMetaData meta = rs.getMetaData();
        String[] columns = new String[meta.getColumnCount()];
        for(int i = 0; i < columns.length; i++) {
            columns[i] = meta.getColumnName(i + 1);
            System.out.print('[');
        }
        while(rs.next())   {
             System.out.print('[');
             for(int i = 0; i < columns.length; i++) {
                 if(i > 0)
                 System.out.print(" , ");
                 System.out.print(columns[i]);
                 System.out.print(" = ");
                 System.out.print(rs.getString(i + 1));
             }
         
         System.out.println(']');
        }
        
    } 
     private static boolean checkForWarning (SQLWarning warn) 
     throws SQLException {
     boolean rc = false;

         if (warn != null) {
             System.out.println ("\n *** Warning ***\n");
             rc = true;
             while (warn != null) {
                  warn = warn.getNextWarning ();
              }
         }
         return rc;
     }
}
      class JavX1ApplicationFrame extends Frame {
        private JavX1 fApplet;
        public JavX1ApplicationFrame(String name) {
          super(name);
          addWindowListener(new JavX1WindowAdapter());
          fApplet = new JavX1();
          fApplet.init();
          fApplet.start();
          add(fApplet);
        }

        class JavX1WindowAdapter extends WindowAdapter {
          public void windowClosing(WindowEvent e) {
            fApplet.stop();
            fApplet.destroy();
            System.exit(0);
          }
        }
      }


Добавлено @ 14:12 
Цитата
откуда взялась переменная i1
 
Пардон, строка 89.
PM   Вверх
Abeke
Дата 23.8.2006, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



      А есть ли какие-то другие способы выборки(записи в массив) наименований полей таблицы кроме этого:
Код

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection
("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getTables(null, null, null, null);
ResultSetMetaData meta = rs.getMetaData();  
while(rs.next()) {
     columns1 = new String[meta.getColumnCount()];
     for(int i = 1; i < (columns1.length); i++) {
         columns1[i] = meta.getColumnName(i).toString();
     }
} 

?
Несколько подозрительный . Данный способ извлекает постоянно почему-то только четыре наименования полей , хотя когда я проверял с помощью SQL-Plus , у некоторых таблиц их гораздо больше. 

PM   Вверх
batigoal
Дата 23.8.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Abeke @  23.8.2006,  09:06 Найти цитируемый пост)
А есть ли какие-то другие способы выборки(записи в массив) наименований полей таблицы кроме этого

В принципе, если тебя интересует поддержка только Оракла, то их можно выцепить из системных таблиц.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 23.8.2006, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



Цитата

то их можно выцепить из системных таблиц

   А примерчик можно,  smile  мне же ведь главное получить список полей таблиц (вернее способ получения списка полей таблицы)
PM   Вверх
LSD
Дата 23.8.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код
select * from DBA_TABLES



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Abeke
Дата 23.8.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



  Ну и как с помощью этого запроса получить список полей таблицы DBA_TABLES?
То есть что потом делать?
PM   Вверх
batigoal
Дата 23.8.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Не совсем понял, что именно тебе нужно, но всю необходимую тебе информацию ты можешь получить из системных таблиц DBA_TABLES и DBA_TAB_COLUMNS.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 23.8.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



   Я хотел бы автоматизировать процесс получения информации из ORACLE след. образом:

1) автомат . получение таблиц из Oracle и запись их наименоаний в массив наименований таблиц;
2) получение полей таблицы (из массива наименований таблиц) , полученной автоматическим способом из Oracle;
3) формирование запросов : SELECT <список полей > FROM <имя таблицы(из массива наименований таблиц)>
Как получить список таблиц , мне уже известно . Теперь я хочу узнать : зная наименование таблицы ,как получить список её полей (т.е. какие есть поля у данной таблицы)
Всё это для того ,чтобы не писать для каждой таблицы
SELECT <список полей > FROM <имя таблицы>
Так как таблиц очень много.


PM   Вверх
batigoal
Дата 23.8.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Abeke @  23.8.2006,  16:55 Найти цитируемый пост)
зная наименование таблицы ,как получить список её полей

Код

SELECT * FROM dba_tab_columns WHERE table_name = 'YOUR_TABLE';



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 24.8.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



  Ввожу 
Код

SELECT * FROM dba_tab_columns WHERE table_name = 'имя_таблицы';

и непонятно , где таблицы , а где их колонки. 

      Ладно , возьмём к примеру таблицу dba_tab_columns  , у которой есть следующие поля :OWNER,  TABLE_NAME,COLUMN_NAME,DATA_TYPE,DAT DATA_TYPE_OWNER,DATA_LENGTH DATA_PRECISION, DATA_SCALE, N, COLUMN_ID DEFAULT_LENGTH,DATA_DEFAULT,NUM_DISTINCT LOW_VALUE,
HIGH_VALUE,DENSITY, NUM_NULLS NUM_BUCKETS, LAST_ANA SAMPLE_SIZE,CHARACTER_SET_NAME,CHAR_COL_DECL_LENGTH,GLO, USE,AVG_COL_LEN.
       Возьмём теперь таблицу AGENCY у которой есть следующие поля : AGENCY_ID ADDRESS_ID, COMPANY_NAME, CONTACT_NAME, CONTACT_TEL, COMMENTS, IMMEDIATE_XCHG . Среди них нет ,кстати , поля table_name .
Кстати все их поля вытащил через SQL*Plus.
     
      Так вот мне нужна технология получения наименований всех полей таблицы.
     Если текущей таблицей стала таблица AGENCY , то чтобы наименования всех её полей ( AGENCY_ID ADDRESS_ID, COMPANY_NAME, CONTACT_NAME, CONTACT_TEL, COMMENTS, IMMEDIATE_XCHG ) записались куда-то например в массив.
     Если текущей таблицей стала таблица dba_tab_columns , то чтобы наименования всех её полей ( OWNER,  TABLE_NAME,COLUMN_NAME,DATA_TYPE,DAT DATA_TYPE_OWNER,DATA_LENGTH DATA_PRECISION, DATA_SCALE, N, COLUMN_ID DEFAULT_LENGTH,DATA_DEFAULT,NUM_DISTINCT LOW_VALUE,
HIGH_VALUE,DENSITY, NUM_NULLS NUM_BUCKETS, LAST_ANA SAMPLE_SIZE,CHARACTER_SET_NAME,CHAR_COL_DECL_LENGTH,GLO, USE,AVG_COL_LEN.) записались куда-то например в массив.

Мне посоветовали такой способ перебора всех полей таблицы:
Код

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
conn = DriverManager.getConnection
("jdbc:oracle:thin:@kussainov_a:1521:VEND", "system", "manager");
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getTables(null, null, null, null);
ResultSetMetaData meta = rs.getMetaData();  
while(rs.next()) {
     columns1 = new String[meta.getColumnCount()];
     for(int i = 1; i < (columns1.length); i++) {
         columns1[i] = meta.getColumnName(i).toString();
     }
} 

,но он не пашет.



PM   Вверх
batigoal
Дата 24.8.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Цитата(Abeke @  24.8.2006,  08:51 Найти цитируемый пост)
и непонятно , где таблицы , а где их колонки. 

Что же здесь непонятного? Имя таблицы - в поле TABLE_NAME, имя колонки - в поле COLUMN_NAME. Ты с SQL знаком?
Цитата(Abeke @  24.8.2006,  08:51 Найти цитируемый пост)
Возьмём теперь таблицу AGENCY

Возьмем. Тогда составляешь запрос
Код

SELECT column_name FROM dba_tab_columns WHERE table_name = 'AGENCY';

и получаешь список наименований ее колонок.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Abeke
Дата 24.8.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 4.8.2006

Репутация: нет
Всего: нет



  Спасибо, большое спасибо, разобрался , заработало!!!
PM   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1014 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.