2015-08-20 4 views
-3

Я использую функцию MySQL для аутентификации входаmysql | Функция несколько возвращает

DELIMITER || 
CREATE FUNCTION CheckLogin (username VARCHAR(10), _password VARCHAR(20)) 
    RETURNS BOOL 
    NOT DETERMINISTIC 
    READS SQL DATA 
BEGIN 
    RETURN EXISTS (SELECT ID FROM `users` WHERE name = _username AND passwd = _password); 
END; 
|| 
DELIMITER ; 

Это мой Java-код:

try { 
    cStmt = (CallableStatement) sql.connection.prepareCall("{? = call CheckLogin(?, ?)}"); 
     cStmt.registerOutParameter(1,Types.BOOLEAN); 
     cStmt.setString(2, name); 
     cStmt.setString(3, passwd); 
     cStmt.execute(); 
     outputValue = cStmt.getBoolean(1); 
    } catch (SQLException e1) { 
     e1.printStackTrace(); 

Я понятия не имею, как вернуть результат SELECT ID Я хочу, чтобы получить идентификатор ,

+0

Почему «ВОЗВРАЩАЕТСЯ BOOL» в функции MySQL? –

+0

, потому что если существует имя пользователя с пропуском, чем возвращает True else false – Norbert

+0

Потому что, наконец, вы сказали: «Я не знаю, как вернуть результат« SELECT ID », я хочу получить идентификатор». –

ответ

1

Поскольку ваша функция возвращает только логическое значение, java не знает, как ID является внутренним для функции mysql. Вместо того, чтобы возвращать логическое значение, вы можете вернуть Id в функции mysql, а в java - проверить, является ли его null, где null означает, что логин завершен, иначе логин будет успешным и у вас есть идентификатор. В качестве альтернативы вы можете вернуть логическое значение и id как CSV varchar, а затем в java разделить его, чтобы извлечь логическое и id.

Смежные вопросы