Fala galera,
Como alguns sabem aqui sou novato no mundo java.
Hoje estou fazendo meu projeto se conectar com o postgre, a conexão está rodando normalmente, se eu chamo uma query executa normal, retorna resultado e trato.
Minha dúvida é, como trabalhar com o postgre + java quando tenho uma função que precisa gravar no banco e me retornar um resultado de uma table?
tenho o seguinte código java:
CallableStatement userSession = con.prepareCall("{ ? = call open_session (?,?,?,?) }");
userSession.registerOutParameter(1, Types.OTHER);
userSession.setString(2, _user_id);
userSession.setString(3, _user_ip);
userSession.setString(4, _session_token);
userSession.execute();
ResultSet results = (ResultSet) userSession.getObject(1);
while (results.next()) {
Debugger.getInstance().showMsg(String.valueOf(results.getFloat(1)));
}
results.close();
userSession.close();
e tenho o seguinte código em plpgsql:
CREATE OR REPLACE FUNCTION open_session(character varying, character varying, character varying) RETURNS refcursor AS
$$
DECLARE
idUser character varying(32);
ipUser character varying(15);
token character varying(50);
dateIn timestamp;
DECLARE cs_user CURSOR FOR SELECT limit, earn FROM user_balances WHERE user_id = idUser;
limit user_balances.limit%TYPE;
earn user_balances.earn%TYPE;
dataUser refcursor;
BEGIN
idUser = $1;
ipUser = $2;
token = $3;
SELECT now() INTO dateIn;
BEGIN
OPEN cs_user;
FETCH cs_user INTO limit, earn;
END;
BEGIN
INSERT INTO coin_flip_sessions (user_id, user_ip, token, date_in, credit_in, bonus_in, earn_in, round, status)
VALUES (idUser, ipUser, token, dateIn, money, bonus, earn, 0, 'o');
END;
CLOSE cs_user;
OPEN dataUser for
SELECT user_balances.*, user_data.currency_id, user_data.language_id FROM user_balances, user_data WHERE user_balances.user_id = ipUser ORDER BY user_balances.date_in DESC LIMIT 1;
RETURN dataUser;
END;
$$
LANGUAGE 'plpgsql';
se eu deixo con.setAutoCommit(false);
ele não grava na base e me retorna nada.
se eu deixo con.setAutoCommit(true);
ele grava na base e diz que “<unnamed portal 1>” não existe.
O que é esse “<unnamed portal 1>”?
Existe outra forma de fazer isso?
Qual é o retorno que tenho q dar no postgre e tratar no java?
Se puderem me ajudar agradeço.
Obrigado