Как проверить, если SQL-запрос вернул true в Java - PullRequest
1 голос
/ 26 февраля 2011

У меня есть этот запрос выбора.Как узнать, нашел ли запрос совпадение в базе данных?

try{
        PreparedStatement fetchPlayers = conn.prepareStatement("SELECT * FROM players WHERE P_Name='" + player + "'");
        fetchPlayers.executeQuery();



        }catch(Exception e){}

Я пытался сделать это, но он всегда возвращает true, даже если я ввожу что-то, чего нет в базе.

if(fetchPlayers.execute()==true){
        System.out.println("True");
        }

Ответы [ 5 ]

6 голосов
/ 26 февраля 2011

PreparedStatement.execute () возвращает

true, если первый результат является объектом ResultSet; false, если первым результатом является счетчик обновлений или нет результата

Используйте взамен executeQuery (). Что вас интересует, так это то, что возвращенный ResultSet имеет положительное число.

ResultSet rs = statement.executeQuery(query);
if ( rs.next() ) {
    // curser has moved to first result of the ResultSet 
    // thus here are matches with this query.
}
4 голосов
/ 26 февраля 2011

Во-первых, вы не должны конструировать свой оператор путем конкатенации строк, но должны использовать заполнители и setXXX-методы.

executeQuery () возвращает ResultSet, и в нем есть несколько методов для перебора результатов.Например, метод next () возвращает false, если строки больше нет.

1 голос
/ 26 февраля 2011

С документ :

Возвращает: true, если первый результат является объектом ResultSet;false, если это число обновлений или нет результатов

Ваше утверждение возвращает (хотя и пустое) ResultSet.

Вы пытались использовать , если существует ?Или, по крайней мере, получить ResultSet и выполнить итерацию по нему, подсчитать записи и определить, существуют ли какие-либо записи (менее эффективно, но это может не быть проблемой).объединять строки SQL, так как это оставляет вас открытыми для атак SQL-инъекций . Скорее, вы должны использовать методы установки параметров в объекте PreparedStatement)

1 голос
/ 26 февраля 2011

Вы можете проверить, сколько столбцов будет возвращено, и по нему посмотреть, будет ли оно больше 0:

ResultSet resultSet = statement.executeQuery(query);
ResultSetMetaData metaData = resultSet.getMetaData();
int columncount = metaData.getColumnCount();
if (columncount > 0) {
    System.out.println("Match found!");
}
0 голосов
/ 15 марта 2011

Простой способ сделать это может быть:

resultSet.last()
if (resultSet.getRow() < 1){
    // process case with no results
}else{
    // process case with results
    resultSet.beforeFirst();
}

Не уверен, насколько это быстро, но если скорость не объект ... `

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...