Невозможно выполнить поиск из 5 вариантов базы данных. - PullRequest
0 голосов
/ 13 апреля 2020

Привет! Я пытаюсь запустить этот код на Groovy, чтобы, если я выполняю поиск между ни одним или всеми параметрами, он возвращал результат. У него изначально была функция в качестве массива, и она работала, но из-за обновления появилась ошибка о том, что произошло исключение.

Reason:
java.lang.IndexOutOfBoundsException: Index: 5, Size: 0
    at java_util_List$get$0.call(Unknown Source)
    at TST_PT0108_APL_CRT_CHN.run(TST_PT0108_APL_CRT_CHN:9)

Так что мне пришлось сменить карту. Но, похоже, у меня тоже есть другая проблема. Столько, сколько я пытался преобразовать, или использовать в качестве карты, он либо не распознает функции (map.add (), ...), ни изменяет код (для (Map.Entry entry: map.entrySet ()) )) все подвело меня. Вот код:

package database

import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.sql.ResultSetMetaData
import java.sql.SQLException
import java.sql.Statement
import java.sql.SQLClientInfoException
import com.kms.katalon.core.annotation.Keyword

public class DatabaseConnection {

    @Keyword

    def Map<String, String> sqlSearch (String id, String driver, String dbURL, String dbUser, String dbPass, String sqlSearchPar) {
        //def ArrayList<String> sqlSearch (String id, String driver, String dbURL, String dbUser, String dbPass, String sqlSearchPar) {

        ArrayList<String> resultList = new ArrayList<String>();


        try {

            // Abrir conexao a base de dados
            Class.forName(driver);

            Connection con = DriverManager.getConnection(dbURL,
                    dbUser, dbPass);

            Statement statement = con.createStatement();

            String sqlSearch = sqlSearchPar + id;
            ResultSet rs = statement.executeQuery(sqlSearch);

            // saber o numero de linhas
            int rowsNumber = 0;
            while (rs.next()) {
                rowsNumber++;
            }

            // se o resultado da pesquisa tiver conteudo...
            if (rowsNumber > 0) {
                // fazer pesquisa sql
                rs = statement.executeQuery(sqlSearch);

                ResultSetMetaData rsmd = rs.getMetaData();
                int columnsNumber = rsmd.getColumnCount();

                rs.next();


                for (int j = 0; j < columnsNumber; j++) {
                    resultList.add(rs.getString(j + 1));
                }
            }
            con.close();
            def resultMap = resultList.toSpreadMap()

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch(Exception e){
            e.printStackTrace();
        }
        return resultList;
    }
}

Когда я пытаюсь преобразовать карту в String или установить значение на карте, она не распознает его. Появляется:

Reason:
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object '[]' with class 'java.util.ArrayList' to class 'java.util.Map' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Map()
    at database.DatabaseConnection.sqlSearch(DatabaseConnection.groovy:66)
    at database.DatabaseConnection.invokeMethod(DatabaseConnection.groovy)
    at com.kms.katalon.core.main.CustomKeywordDelegatingMetaClass.invokeStaticMethod(CustomKeywordDelegatingMetaClass.java:50)
    at TST_PT0108_APL_CRT_CHN.run(TST_PT0108_APL_CRT_CHN:6)

Я думаю я что-то упускаю из-за c (у меня действительно есть java опыт), но я не могу понять, что я делаю неправильно. вы можете помочь? Заранее спасибо.

...