sql语句看不懂,高手来解释下

小幺鸡 2012-01-16 09:28:47
在网上下的strut1.2的图书馆系统源码,在这里出错了,返回的结果集为空,看半天不懂
public ArrayList getBooksList(int count, int page, String sqlstr) {
ArrayList list = new ArrayList();
try {
proc = conn.prepareCall("{call BooksPage (?,?,?,?)}");
proc.setInt(1, page);
proc.setInt(2, count);
proc.setString(3, sqlstr);
proc.registerOutParameter(4, Types.INTEGER);
res = proc.executeQuery();
while (res.next()) {
BooksBean bsb = new BooksBean();
bsb.setBooks_Amount(res.getInt("Books_Amount"));
bsb.setBooks_Company(res.getString("Books_Company"));
bsb.setBooks_Count(res.getInt("Books_Count"));
bsb.setBooks_ID(res.getInt("Books_ID"));
bsb.setBooks_Name(res.getString("Books_Name"));
bsb.setBooks_Time(res.getString("Books_Time"));
bsb.setBookType_ID(res.getInt("BookType_ID"));
list.add(bsb);
}
pagecount = proc.getInt(4);
} catch (SQLException ex) {
System.out.println("服务器异常发生在 getBooksList()");
ex.printStackTrace();
}
return list;
}
请大家赐教。。。。
...全文
194 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jnhcd 2012-01-17
  • 打赏
  • 举报
回复
call BooksPage (?,?,?,?)}这个sql贴出来啊
haidilee 2012-01-17
  • 打赏
  • 举报
回复

其实这个问题一点一点调试就可以了,断点就设在调用过程的后面一句,单步调试。看看哪里空掉了? 我猜测是过程执行的时候哪个数据空掉了。所以呢,你可以去调试过程
五哥 2012-01-17
  • 打赏
  • 举报
回复
你可以在查询分析器中执行 execute BooksPage (?,?,?,?)

问号用你的实际输入代替 ,执行一下就知道结果了 ;
4个问号的值分别赋值给 @curPage int=1,
@perPageRecords int,
@sqlstr varchar(255),
@countpage int output
这4个变量 ;

五哥 2012-01-17
  • 打赏
  • 举报
回复
if exists (select 1 from sysobjects where id = object_id('total_count') and type = 'U') drop table total_count
---找到用户创建的表'total_count' ,如果存在了就删除掉,然后在创建一个 'total_count' ;
create table total_count(toll int)
execute( 'insert into total_count select count(*) from Books ' + @sqlstr)


---把查询出来的数据插入到'total_count' 表
select @total_count = toll from total_count

--查询出数据赋值给@total_count变量,然后把表'total_count'删除掉
drop table total_count
declare @page_in_show int
set @page_in_show=@total_count-(@curPage-1)*@perPageRecords
set @countpage=(@total_count+@perPageRecords -1)/@perPageRecords
exec('select top '+@perPageRecords+' * from (select top '+@page_in_show+' * from Books '+@sqlstr+' order by Books_ID desc) as a order by Books_ID asc')



你可以在查询分析器中执行 call BooksPage (?,?,?,?)

问号用你的实际输入代替 ,执行一下就知道结果了 ;
4个问号的值分别赋值给 @curPage int=1,
@perPageRecords int,
@sqlstr varchar(255),
@countpage int output
这4个变量 ;



小幺鸡 2012-01-17
  • 打赏
  • 举报
回复
是这个么?我贴出Bookspage的好了

USE [Book]
GO
/****** Object: StoredProcedure [dbo].[BooksPage] Script Date: 01/17/2012 08:22:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[BooksPage]
@curPage int=1,
@perPageRecords int,
@sqlstr varchar(255),
@countpage int output
as
declare @total_count int
if exists (select 1 from sysobjects where id = object_id('total_count') and type = 'U') drop table total_count
create table total_count(toll int)
execute( 'insert into total_count select count(*) from Books ' + @sqlstr)
select @total_count = toll from total_count
drop table total_count
declare @page_in_show int
set @page_in_show=@total_count-(@curPage-1)*@perPageRecords
set @countpage=(@total_count+@perPageRecords -1)/@perPageRecords
exec('select top '+@perPageRecords+' * from (select top '+@page_in_show+' * from Books '+@sqlstr+' order by Books_ID desc) as a order by Books_ID asc')
herminen 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 b1481263728 的回复:]
这个我还真不知道存储过程在哪里,网上找得源码,导入的mdf ldf文件,好像还一个data文件没什么用
[/Quote]
sql server数据库吧?打开数据库,展开相应的数据库,有个可编程性,再展开,就能看到存储过程了。
小幺鸡 2012-01-16
  • 打赏
  • 举报
回复
这个我还真不知道存储过程在哪里,网上找得源码,导入的mdf ldf文件,好像还一个data文件没什么用
wnf2009 2012-01-16
  • 打赏
  • 举报
回复
存储过程贴出来看看

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧