Тайм-аут чтения (большие данные) - PullRequest
0 голосов
/ 15 января 2020

У меня есть база данных, и я создал хранимую процедуру, чтобы вернуть из нее 6 случайных элементов.

Когда я запускаю его из SSMS, он работает отлично, но когда я делаю это из java, он просто зависает и выдает SQL Исключение сервера:

Время ожидания истекло .

Это всегда так на элементе 5-6 (первые 4-5 загружаются правильно).

Но если go в хранимую процедуру и установить ее только на Возьмем, к примеру, 3, он всегда идет по плану, он отлично читает все данные.

Итак, моя проблема в том, почему это так?

Обратите внимание, что у меня есть изображение, хранящееся как varbinary .

------------Java code

public void SetRecomandation() throws SQLException, IOException
    {
        con = db.getConnection();

        Statement st = con.createStatement();
        String query = "EXEC GetRandomBook";

        st.setQueryTimeout(120);
        ResultSet rs = st.executeQuery(query);
        int i = 0;



        while(rs.next())
        {
            String name = rs.getString("Name");
            Integer rating = rs.getInt("Rating");
            String summary = rs.getString("Summary");
            String firstName = rs.getString("FirstName");
            String lastName = rs.getString("LastName");
            InputStream imageIS = rs.getBinaryStream("RawValue");



            BufferedImage imag = ImageIO.read(imageIS); 

            homeView.CreateRecomandations(SwingSettings.recCardsSpacing * (i + 1) + 200 * i, SwingSettings.recCardsSpacing, name, rating, summary, firstName, lastName, imag);
            i++;    
        }


    }



------------The sql stored procedure-----------

SELECT TOP 3 B.Name, B.Rating, B.Summary, A.FirstName, LastName, I.RawValue FROM Author AS A INNER JOIN BookAuthor AS BA 
                                                            on A.AuthorID = BA.AuthorID 
                                                        INNER JOIN Book AS B
                                                            on B.BookID = BA.BookID
                                                        INNER JOIN Image as I on B.ImageID = I.Id

ORDER BY NEWID()

...