Oracle JDBC выберите с ГДЕ возвращают 0 - PullRequest
2 голосов
/ 01 октября 2009

Подобный вопрос к: Странная проблема с JDBC, select возвращает null но люди не просили об этом.

Мой код:

public int myMethod(String day) throws SQLException{
  String sql = "Select count(*) from MyTable WHERE someColumn = " + day;
  Connection connection = ConnFactory.get();
  PreparedStatement prepareStatement = null;
  ResultSet resultSet = null;
  int ret = -1;
  try{
      prepareStatement = connection.prepareStatement(sql);
      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;
}

Этот код всегда возвращает 0. Я пытаюсь зарегистрировать sql перед выполнением и пытаюсь запустить его в SQLdeveloper и получить правильное значение (более 100). Когда я удаляю WHERE, sql = "Select count(*) from MyTable запрашивает количество всех строк в таблице. Я использую Oracle 10g с ojdbc-14.jar (последняя версия из репозитория maven) и Java 6.

Ответы [ 3 ]

5 голосов
/ 01 октября 2009

day не указан правильно, я бы предложил использовать подготовленное утверждение , как подготовленное утверждение следующим образом:

...
try {
    prepareStatement = connection.prepareStatement("Select count(*) from MyTable WHERE someColumn = ?");
    prepareStatement.setString(1,day);
...

совпадает с:

sql = "Select count(*) from MyTable WHERE someColumn = '" + day + "'";

с несколькими преимуществами перед последними (в основном безопасность и производительность). См:

http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html

4 голосов
/ 01 октября 2009

Прежде всего, использование sql, как это, не рекомендуется. Потому что это приводит к внедрению SQL.

В будущем попробуйте использовать, как показано ниже, и используйте PreparedStatement для выполнения

String sql = "Select count(*) from MyTable WHERE someColumn = ? "

Для вашего решения вы пробовали

String sql = "Select count(*) from MyTable WHERE someColumn = '" + day + "'";
0 голосов
/ 01 октября 2009

karim79 - хороший ответ, вы забыли добавить знаки апострофа в значение "день"

String sql = "Select count(*) from MyTable WHERE someColumn = '" + day + "'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...