Java SQL проблема при выполнении запроса через CallableStatement с параметром - PullRequest
0 голосов
/ 04 августа 2020

У меня проблема в CallableStatement, который выполняет запрос хранимой процедуры, который принимает параметр.

У меня есть список строк, содержащих такой запрос:

{call query5_immatricolati(?)}

У меня есть список строк, содержащих параметр типа

String cds = "L-INF";

У меня нет синтаксической ошибки SQL при запуске, но набор результатов не имеет никакого значения.

Ожидаемый результат исполнение состоит в том, что я мог создать объект, получив данные из набора результатов.

Вот код:

for (int i = 0; i < INDICATORI.getInstance().getListaIndicatori().size();) {
            for (int j = 0; j < INDICATORI.getInstance().getListaQuery().size();) {

                if (INDICATORI.getInstance().getListaIndicatori().get(i).equals("iC00a")) {
                    
                    for (String cds : CDS.getInstance().getCds().values()) {

                        
                        ArrayList<indicatore> lista = new ArrayList<indicatore>();
                        String query = INDICATORI.getInstance().getListaQuery().get(j);
                        
                        try {
                            CallableStatement cb = DB.getInstance().getConnection().prepareCall(query);
                            cb.setString(1, cds);
                            DB.getInstance().setResultSet(cb.executeQuery());

                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        try {
                           
                            
                            
                            while (DB.getInstance().getResultSet().next()) {
                                
                                iC00a obj = new iC00a();
                                obj.setId(counter);
                                obj.setAnnoIscrizione(DB.getInstance().getResultSet().getString(1));
                                obj.setIscrittiPrimoAnno(DB.getInstance().getResultSet().getInt(2));
                        
                                lista.add(obj);
                                
                                counter++;
                            }
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        map.getInstance().getMap().put(INDICATORI.getInstance().getListaIndicatori().get(i)+cds, lista);
                        counter=0;
                    }

                }
                
                i++;
                j++;
            }
        }

Я пытался вручную установить в cb.setString (1, cds ) значение, подобное cb.setString (1, "L-INF"), И ЭТО РАБОТАЕТ !!!

Но я не могу установить параметр вручную, мне нужно выполнить итерацию для каждого l oop каждого строка и динамически вставить в качестве параметра.

Почему, если я устанавливаю параметр вручную как строку, он работает вместо этого, если я не указываю строковую переменную?

Может ли кто-нибудь сказать мне, что я делаю неправильно ?

1 Ответ

0 голосов
/ 05 августа 2020

После множества попыток я нашел решение.

Проблема в вашей переменной cds, потому что до или после нее могут быть пробелы. Попробуйте:

cb.setString(1,cds.strip());

У меня сработало.

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