В приложении, которое я писал, один из методов на уровне DAO должен запрашивать базу данных (в данном случае MySQL ), возвращая список записей, соответствующих критериям.Таблица, к которой она относится, - это WordInstance, и она имеет 3 внешних ключа к 3 другим таблицам ( Слова , Части речи и Категории ).Поле Category в таблице wordInstances может иметь значение null , но остальные поля не могут - потому что слово может не иметь категорию.
У меня есть 2 отдельных метода createObjectFromResults и createObjectListFromResults .Внутри createObjectListFromResults есть строка / цикл while (objResults.next ()) и внутри, которая вызывает другую функцию create для выполнения работы для отдельной строки.По какой-то причине он пропускает этот цикл, как будто нет записей для обработки - кроме случаев, когда я беру тот же оператор и подключаю его к рабочей среде MySQL, я получаю 1 строку (преобразование раздела «Category =?» В «Category равно нулю»)"для MySQL Workbench) - это после однократного запуска и без сброса схемы или таблицы между выполнениями.Возможно, я делаю что-то не так с моим sQL-запросом относительно JDBC, чтобы он не возвращал никаких записей?Код ниже:
public List<WordInstance> listByWordPartOfSpeechAndCategory(final Word objWord, final PartOfSpeech objPartOfSpeech, final Category objCategory) throws SQLException
{
if(!isTableExists())
createTable();
try
{
PreparedStatement objStatement = getConnection().prepareStatement("select " + getQueriedColumnsForSelect() + " from " + TableName + " where Word = ? and PartOfSpeech = ? and Category = ?;");
objStatement.setInt(1, objWord.getId());
objStatement.setInt(2, objPartOfSpeech.getId());
if(objCategory != null)
objStatement.setInt(3, objCategory.getId());
else
objStatement.setNull(3, Types.INTEGER);
return(createObjectListFromResults(objStatement.executeQuery()));
}
catch(SQLException objException)
{
msObjLogger.error("There was a problem retrieving the word instances that had the same word, part of speech, and category...", objException);
return(null);
}
finally
{
closeConnection();
}
}
TableName для этого объекта DAO - "WordInstances", а getQueriedColumnsForSelect:
protected String getQueriedColumnsForSelect()
{
return("Id, Word, PartOfSpeech, Category, Definition, Slang");
}
createObjectListFromResults находится здесь:
protected List<WordInstance> createObjectListFromResults(final ResultSet objResults) throws SQLException
{
List<WordInstance> lstWordInstances = new ArrayList<WordInstance>();
while(objResults.next())
lstWordInstances.add(createObjectFromResults(objResults));
return(lstWordInstances);
}
Я могувключите любой другой код по запросу, чтобы помочь разобраться с этой проблемой.Как я уже сказал - в самом MySQL он возвращает строку (или больше, поскольку я заметил проблему, потому что там было несколько записей) - На самом деле несколько записей сбивают меня с толку, потому что у меня есть уникальный ключ для Word, PartOfSpeech и Category, за исключением того факта, чтоКатегория null делает ее уникальной.
Есть мысли?