Oracle JDBC where i nieprawidłowy wynik zapytania

0

Kod:

public int myMethod(String day) throws SQLException{
  String sql = "Select count(*) from MyTable WHERE someColumn = ? ";
  Connection connection = ConnFactory.get();
  PreparedStatement prepareStatement = null;
  ResultSet resultSet = null;
  int ret = -1;
  try{
      prepareStatement = connection.prepareStatement(sql);
      prepareStatement.setString(1, day);
      resultSet = prepareStatement.executeQuery(sql);
      if(resultSet.next()){
          ret = resultSet.getInt(1);
      }
  }
  catch(SQLException sqle){
      // closing statement & ResultSet, log and throw exception
  }
  finally{
     // closing statement & ResultSet
  }
  ConnFactory.kill(connection);

  return ret;
}

Wynik wywołania 0. Prawidłowy wynik około 100. Jeżeli usunę klauzulę WHERE to zaczyna zwracać prawidłowe wyniki. Czy ktoś może mi powiedzieć dlaczego się tak dzieje?

0

a jakie przykladowe wartosci ma day?

0

na przykład 20090311 format YYYYMMDD kolumna jest typu NUMBER. Dlaczego tak? Nie pytaj, bo nie wiem.

0

nie wali żadnym errorem o typie kolumny?

spróbuj może setObject(1, day) zamiast setString. Ewentualnie - co głupio zabrzmi - zparsuj ten ciąg na Integera i daj setInt (jestem zmuszony pisać ostatnio pod javą 1.4 stąd te dziwne pomysly ; ))

0

Błędów brak. Próbowałem z setObject i setInt i nadal nic...

0

Trochę ten kod mi się nie podoba ale...

  1. Czy zapytanie na pewno działa
  2. Czy nie powinnieneś zacząć od 0 w setString( 0, day ) ?
0

A co daje wpisane bezpośrednio
Select count(*) from MyTable WHERE someColumn=20090311
?

Jeżeli MyTable ma klucz główny (id), to spróbuj jeszcze:
Select count(id) from MyTable WHERE someColumn=20090311

Usuń też spacje wokół '='

getInt() zwraca też 0, gdy zapytanie zwróciło NULLa.

0

@__krzysiek85, bezpośrednie zapytanie działa poprawnie przez SQLDevelopera. Co do spacji to nie ma znaczenia.

@gosc, zgodnie z dokumentacją:

void setInt(int parameterIndex,
int x)
throws SQLException

Sets the designated parameter to the given Java int value. The driver converts this to an SQL INTEGER value when it sends it to the database.

Parameters:
    parameterIndex - the first parameter is 1, the second is 2, ...
    x - the parameter value

Zatem jest dobrze.

0

a jaka to baza? Oracle?

//edit: aha - tytuł ; )

0

Spróbuj :

public int myMethod(String day) throws SQLException{
  String sql = "Select count(*) as ilosc from MyTable WHERE someColumn = ? ";
  Connection connection = ConnFactory.get();
  PreparedStatement prepareStatement = null;
  ResultSet resultSet = null;
  int ret = -1;
  try{
      prepareStatement = connection.prepareStatement(sql);
      prepareStatement.setString(1, day);
      resultSet = prepareStatement.executeQuery(sql);
      if(resultSet.next()){
          ret = resultSet.getInt("ilosc");
      }
  }
  catch(SQLException sqle){
      // closing statement & ResultSet, log and throw exception
  }
  finally{
     // closing statement & ResultSet
  }
  ConnFactory.kill(connection);

  return ret;
}

Oraz podstaw na sztywno coś za zmienna day. Moze tu tkwi problem

1 użytkowników online, w tym zalogowanych: 0, gości: 1