У меня есть процедура сохранения только с 1 параметром.Я могу выполнить процедуру, подобную этой exec proc_name param1
, в Microsoft SQL Server Management Studio и показать набор результатов, который я хочу.Но когда я пытаюсь в java с моим кодом, подобным этому:
String url = "jdbc:sqlserver://TOSHIBA\\SQLEXPRESS;databaseName=Perpustakaan;integratedSecurity=true";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(url);
CallableStatement statement = conn.prepareCall("{call search(?)}");
statement.setString(1,parameter);
ArrayList<Buku> result = new ArrayList<>();
statement.execute();
ResultSet rs = statement.executeQuery();
while (rs.next()) {
int tempId = rs.getInt("id");
String tempJudul = rs.getString("judul");
result.add(new Buku(tempId, tempJudul));
}
return result;
, я получаю сообщение об ошибке «Оператор не вернул набор результатов».Параметр в statement.setString(1,parameter)
имеет тип String.
Это мой код процедуры магазина на случай, если что-то не так
alter proc search
@kata varchar(255)
as
declare @tempResult table
(
kata varchar(255)
)
declare
@idx int,
@katas varchar(255)
set @katas = @kata
set @idx = CHARINDEX(',',@katas,1)
while(@idx != 0)
begin
insert into @tempResult
select
SUBSTRING(@katas,1,@idx-1)
set @katas = SUBSTRING(@katas,@idx+1,100000000)
set @idx = CHARINDEX(',',@katas,1)
end
insert into @tempResult
select
@katas
declare @searchResult table
(
judul varchar(255)
)
insert into @searchResult
select dbo.buku.judul
from dbo.buku cross join @tempResult
where CHARINDEX(kata, dbo.buku.judul) > 0
select
dbo.buku.id, sr.judul
from
@searchResult as sr join dbo.buku
on
sr.judul = dbo.buku.judul
group by
sr.judul, dbo.buku.id
order by
COUNT(sr.judul) desc
exec search 'Games'