Итак, у меня есть фрагмент кода, который вызывается несколько раз. Однако во время некоторого тестирования я заметил, что мой ResultSet возвращается неправильно в соответствии с базой данных. После дальнейших исследований я заметил, что он каким-то образом используется повторно. СТОИТ упомянуть, что когда я перезапускаю программу, она получает правильный результат. SQL всегда один и тот же.
Мой код:
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, packet.getUserId());
ResultSet dbResult = ps.executeQuery();
while(dbResult.next())
{
System.out.println("There were items!" );
Item item = new Item();
item.setItemType(dbResult.getInt(1));
item.setFromUser(dbResult.getString(2));
item.setItemMessage(dbResult.getString(3));
toReturn.add(item);
}
Это была моя последовательность тестирования:
- Получить строки из ResultSet один раз и получить правильные результаты - ОК
- Удалите все строки из таблицы, которые использует конкретный sql выше, что означает, что ResultSet не должен ничего возвращать в следующий раз.
- Попробуйте выполнить выборку еще раз (теперь она должна вернуть 0 строк), НО она возвращает те же самые строки, что и на шаге 1, даже если таблица базы данных пуста.
Должен ли быть закрыт ResultSet или что-то еще после использования, или что мне не хватает? Я получаю результаты из ResultSet, хотя в базе данных ничего нет. Я могу гарантировать, что SQL является законным, но ResultSet, похоже, не создается из него во второй раз, когда он вызывается.
РЕДАКТИРОВАТЬ (код инициализации соединения)
public class DBFactory
{
protected String databaseName = null;
protected String username = null;
protected String password = null;
protected Connection connection = null;
protected Statement statement = null;
protected DBFactory( String databaseName, String username, String password)
{
this.databaseName = databaseName;
this.username = username;
this.password = password;
}
protected void initConnection()
{
if (databaseName == null || username == null || password == null)
throw new IllegalStateException();
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
this.connection = DriverManager.getConnection(this.databaseName, this.username, this.password);
this.statement = this.connection.createStatement();
}
catch (Exception e)
{
System.out.println("DBFactory " + e.getMessage());
}
}
System.out.println("There were items!" );выполняется ли эта строка, когда вы очищаете свои таблицы и запускаете без перезапуска? - person Bhesh Gurung   schedule 15.12.2012