@igorperesetsky

Как правильно вызывать функции pg_variables в jdbc?

Недавно начал работать с PG (v15)
Если вызываю в DBeaver :
select pgv_set_int('mypackage','v1',1);
    select pgv_get_int('mypackage','v1');

то все работает.

попытка вызвать установку переменной через jdbc приводит к ошибке:
org.postgresql.util.PSQLException: ERROR: function pgv_get_int(character varying, character varying) does not exist
Подсказка: No function matches the given name and argument types. You might need to add explicit type casts.

public class LoaderDbHelper {

    public static void setGlobalInteger_test(Connection cn,String group, String varName, Integer value) throws SQLException {
        String sql = "select pgv_set_int(?,?,?)";
        PreparedStatement cs = null;
        try{
            cs = cn.prepareStatement(sql);
            cs.setString(1,group);
            cs.setString(2,varName);
            cs.setInt(3,value);
            cs.execute();
        }finally {
            DBHelper.release(cs);
        }
    }

    public static Integer getGlobalInteger_test(Connection cn,String group, String varName) throws SQLException {
        String sql = "select pgv_get_int(?,?)";
        PreparedStatement cs = null;
        ResultSet rs = null;
        Integer reVal = null;
        try{
            cs = cn.prepareStatement(sql);
            cs.setString(1,group);
            cs.setString(2,varName);
            rs = cs.executeQuery();
            if (rs.next()) {
                reVal = DBHelper.RS_GetInteger(rs,1);
            }
        }finally {
            DBHelper.release(rs);
            DBHelper.release(cs);
        }
        return reVal;
    }

    //-----------------------------------------------
    public static void main(String[] args) {
        try {
            Connection cn = ConnectionHelper.getConnect();
            LoaderDbHelper.setGlobalInteger_test(cn,"test","v1",100);
            Integer ret = LoaderDbHelper.getGlobalInteger_test(cn, "test", "v1");
            System.out.println(ret);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


Вопрос: как правильно вызвать ? Либо "в чем засада ?"
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
xez
@xez
TL Junior Roo
В подсказке написано "You might need to add explicit type casts."
Попробуйте вызывать так:
pgv_set_int('mypackage', 'v1', true)
pgv_get_int('mypackage', 'v1', true)
(ну или false, по ситуации)
Ответ написан
@igorperesetsky Автор вопроса
вопрос решен.
Необходимо либо явно указывать public.pgv_set_int
Либо прописать в search_path схему public при установке коннекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы