У меня есть база данных, и я создал хранимую процедуру, чтобы вернуть из нее 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()