Хранимая процедура, использующая значения JSON без перебора значений массива объектов в Java - PullRequest
0 голосов
/ 10 сентября 2018

Я довольно новичок в Java и JSON в целом, и у меня возникла проблема с этим сценарием.Вот и мы:

Я должен отправить файл JSON, который запустит 2 хранимые процедуры.Первый SP записывает данные в таблицу заголовков, а другой использует значение курсора, возвращаемое первым SP, для записи в детальную таблицу любое количество раз.

Я определяю свой JSON-файл следующим образом, который может иметь любое количество массивов подробных объектов (для практических целей я просто тестирую с 2).

Мой заголовок SP пишет правильно ивозвращает значение курсора, которое мне нужно записать в мою таблицу данных.Проблема в моем подробном SP, который записывает только значения первого массива, игнорируя второй.Другими словами, код не выполняет итерацию по всем определенным значениям массива.

Кроме того, мой StackTrace дает мне оба:

  • DEBUG org.springframework.web.servlet.DispatcherServlet - успешно выполненный запрос

  • java.sql.SQLException: состояние курсора недопустимо

Как правильно написать предложение FOR, чтобы оно перебирало все значения моего массива объектов-подробностей?

Спасибо за потраченное время!


ОПРЕДЕЛЕНИЕ POJO:

HeaderPOJO:

Частная строковая компания;

Частная строкаname;

private Подробности списка;

DetailPOJO:

private String company;

private String group;

private int id;


JSON SENT: {

"company":"1",
"name":"somedude",
"detail":[
      {
        "company":"1",
        "group":"AB",
        "id":1
      },
      {
        "company":"1",
        "group":"AC",
        "id":2          
      }

     ]

}


SNIPPET КОДА JAVA:

public int dostuff (@RequestBody dostuffsavestuffH) {

ResultSet rs = null;
Connection con = null;

int cursorreturned = 0;

try
{
    java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());
    con = DriverManager.getConnection("WORKING CONNECTION");            
            Statement st = con.createStatement();
    rs = st.executeQuery("call stored.procedure1(HEADER PARAMETERS)");

    while(rs.next())
            {
                cursorreturned = rs.getInt("SP Cursor"); //THIS IS A VALUE RETURNED BY MY SP WHICH I NEED FOR MY DETAILS TABLE
            }

    for(DetailPOJO savestuffD:savestuffH.getDetail())
            {
                rs = st.executeQuery("call stored.procedure2('" + savestuffD.getCompany() + "', " + cursorreturned + ", '" + savestuffD.getGroup() + "', " + savestuffD.getid() + ")");
            }
}

}

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