Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Не удаётся инициализировать запрос


Автор: check 30.9.2006, 14:30
Код

class DB {

  ...
   
   DB(int f) {
    String url = "jdbc:odbc:address";
    try
     {
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     }
    catch(Exception e)
     {
        System.out.println("Classdefnotfound"+e);
     }
    try
     {
        Connection db = DriverManager.getConnection(url);
        Statement sq = db.createStatement();
        String qw;
        if (f == 0)
         qw = "SELECT name FROM street";
        else if (f == 1)
        qw = "SELECT house FROM address";
        ResultSet res = sq.executeQuery(qw);
    
            while (res.next()) {
              String row = f == 0 ? res.getString("name") : res.getString("house");
            lst.add(row + "\n");
         } 
     }

  ...
  ...

   String get(int Ind) {
    return (String)lst.get(Ind); 
   }

   int size() {
    return lst.size();
   }
}


Вызов этого класса происходит из диалога с закладками. Если открывается закладка с индексом 0(она же открыта по умолчанию), то должен выполнится первый запрос, если с индексом 1, то второй.

То есть так вызывается класс если открыта закладка по-умолчанию
Код

DB db1 = new DB(0); 

и так, если щелкнули по какой-либо закладке 
Код

    tabs.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
         DB db2 = new DB(tabs.getSelectedndex());
     for (int j=0; j < db2.size(); j++)  
           ...
      }
    }); 


То есть я передаю в конструктор класса DB целое число и в зависимости от этого числа выполняю то или иной запрос.
Теперь собственно проблема: в строке 25 выдается ошибка "переменная qw не инициализирована".
Значит не одно из условий
Код

       if (f == 0)
         ...
        else if (f == 1)
        ...

не выполняется.  А почему?   smile 

Автор: LSD 30.9.2006, 14:43
Компилятор проверяет условие формально, если f будет например 3, то ни одно из условий не будет выполнено.

Сделай так:
Код
if(f == 0)
  ...
else if(f == 1)
  ...
else
  throws new  IllegalArgumentExepction("Invalid f value = " + f);

Автор: check 30.9.2006, 16:12
Код

throws new  IllegalArgumentException("Invalid f value = " + f);

У меня эта строка почему-то вызвала ошибку "illegal start of expression", 
но идея понятна. Я пока просто заменил else if на else поскольку у меня наверное будут только две закладки.

Автор: LSD 30.9.2006, 17:39
Цитата(check @  30.9.2006,  17:12 Найти цитируемый пост)
У меня эта строка почему-то вызвала ошибку "illegal start of expression", 

Я опечатался, вместо throws надо было throw.

Автор: check 30.9.2006, 23:19
Цитата(LSD @  30.9.2006,  17:39 Найти цитируемый пост)
Я опечатался
Я тоже. Под "закладками" я подразумевал вкладки  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)