Проблем на Java - Решено

Взаимопомощ, полезна информация и всичко, извън темата на останалите секции
Потребителски аватар
buFka
Мнения: 3315
Регистриран на: Сря 09 ное 2005 8:00
Автомобил:
Двигател:
Местоположение: на Герена
Контакти:

Проблем на Java - Решено

Мнениеот buFka » Сря 07 юни 2006 7:11


Имам следния абстрактен клас:

Код: Избери всички

package added;

import java.sql.*;
import org.apache.lenya.ac.Item;

abstract public class dbconn implements Item
{
   int antwort = 0;
   
   public boolean checkexsist()  {

      String id = getId();
      String name = getName();
      try {
            Class.forName( "oracle.jdbc.driver.OracleDriver" );
          }
          catch ( ClassNotFoundException e ) {
            System.out.println( "Fehler bei ODBC-JDBC-Bridge" + e );
          }
          Connection conn=null;
          Statement stmt=null;
          ResultSet rSet=null;
          try
          {
            String url = "jdbc:oracle:thin:@******:1526:CONSUL92";
            conn = DriverManager.getConnection(url, "user", "pass" );
            stmt = conn.createStatement();
            String sqlQuery = "SELECT id, name FROM TEST where id like '"+id+"'";
            rSet = stmt.executeQuery( sqlQuery );
          }
         
          catch ( Exception e ) {
              System.out.println( "Fehler bei Datenbankzugriff" + e );
          }
         
          try {
             while (rSet.next()) {
                 if (id.equals(rSet.getString(1)) && name.equals(rSet.getString(2))){
                    antwort=1;
                 }
                 else {
                    antwort=0;
                 }
              }
                  stmt.close();
                  conn.close();
         }
         catch(Exception e){
              System.out.println(e);
         }
         if (antwort==1){
            return true;
         }
         else {
            
            return false;
            
         }
   }
}


и искам да използвам резултата от checkexsist() (true или false) в следния клас:


Код: Избери всички

package org.apache.lenya.ac.impl;

import org.apache.lenya.ac.AccessControlException;
import org.apache.lenya.ac.Password;
import org.apache.lenya.ac.User;
import org.apache.log4j.Category;
import added.dbconn;

public abstract class AbstractUser extends AbstractGroupable implements User{
.
.
.
boolean test = checkexsist();
        if (test == true)


eclipse обаче съска по следния начин:

The method checkexsist() is undefined for the type AbstractUser

ако вместо

Код: Избери всички

boolean test = checkexsist();


ползвам

Код: Избери всички

boolean test = dbconn.checkexsist();


тогава пак плюе съобщение:

Cannot make a static reference to the non-static method checkexsist() from the type dbconn...

та някой ако може да ме светне кое не съм схванал правилно :)

Последна промяна от buFka на Сря 07 юни 2006 10:07, променено общо 1 път.




Flatmo
Мнения: 379
Регистриран на: Пон 27 сеп 2004 18:06
Автомобил:
Двигател:
Местоположение: Варна
Контакти:

Мнениеот Flatmo » Сря 07 юни 2006 7:39


Махни спецификатора abstract от дефиницията на класа dbconn, след това или инстанцирай класа т.е. трябва да имаш ред от вида

Код: Избери всички

dbconn nqkakvo_ime = new dbconn();

Или добави класа dbconn към

Код: Избери всички

public abstract class AbstractUser extends AbstractGroupable, dbconn implements User


Ти добре си пробвал двата начина да извикаш променливата, но за първия начин трябва да я виждаш т.е. класа от който се опитваш да извикаш променливата трябва да е наследник на dbconn
При втория начин класа не трябва да не е абстрактен за да може да създадеш обект от класа и да се обърнеш към него т.е. boolean test = nqkakvo_ime.checkexsist();


Потребителски аватар
buFka
Мнения: 3315
Регистриран на: Сря 09 ное 2005 8:00
Автомобил:
Двигател:
Местоположение: на Герена
Контакти:

Мнениеот buFka » Сря 07 юни 2006 7:47


значи класа трябва да си ми остане абстрактен, защото ползва 2 метода от един интерфейс...(поне аз незнам как по друг начин да ползвам само 2 метода от интерфейса, ако не е абстрактен трябва да позлва всички методи май)

преди да пусна поста бях пробвал и това което ти каза

Код: Избери всички

public abstract class AbstractUser extends AbstractGroupable, dbconn implements User


обаче доколкото знам само интерфейсите може да са повече от един. при опит да extends и класа dbconn ми дава следната грешка:

Код: Избери всички

Syntax error on token ",", . expected


Потребителски аватар
wili98
Щраусолог
Мнения: 7566
Регистриран на: Вто 07 дек 2004 12:42
Автомобил:
Двигател:
Местоположение: София
Контакти:

Мнениеот wili98 » Сря 07 юни 2006 8:01


buFka написа:значи класа трябва да си ми остане абстрактен,

Ами просто дефинирай телата на методите от интерфейса..и няма да имаш проблеми..
Другият вариант е да си дефинирай като static checkExist...

И въупрос, като не искаш да дефинираш методите на интерфейса защо го имплементваш? просто го махни..
Ако ще си сигурен, че след това че никой няма да ти използва класа над теб...


Потребителски аватар
buFka
Мнения: 3315
Регистриран на: Сря 09 ное 2005 8:00
Автомобил:
Двигател:
Местоположение: на Герена
Контакти:

Мнениеот buFka » Сря 07 юни 2006 10:07


нещо се омешах с тея класове и интерфейси...

значи имам интерфейс Item, клас AbstractUser и още един клас dbconn (който е мой, Item и АbstractUser не са) ...

за да нямам повече проблеми с разни implements и extends просто преместих съдържанието на dbconn в AbstractUser, който имплементира 2 интерфейса (включително Item), извиквам си методите като пич и всичко си работи на 6 :)

ПС. Wili98, чесно казано не разбрах какво имаш предвид, ама сега вече е се тая :)



Върни се в “ОФФ-Топик - други”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 32 госта