各位兄弟姐妹们大家好,有一个问题,已经困扰我好几个小时了,精神差点崩溃了!真诚地寻求各位高手的帮助,非常谢谢!
这是我数据库(Test)中的一张表books:bookName bookISBN bookPrice bookAuthor publisher publisherDate bookType bookAmount
Java JDK实例宝典 978-7-121-03651-4 79 夏先波 电子工业出版社 2008-1-24 计算机/程序设计 2
JavaScript权威指南978-7-111-21632-2 109 David Flanagan 机械工业出版社 2007-8-14计算机/程序设计 4
SQL权威指南 978-7-111-22708-3 63.7 范德兰斯 机械工业出版社 2008-1-1 计算机/数据库 5
Oracle 10g宝典 978-7-121-01842-8 89 路川/胡欣杰 电子工业出版社 2006-1-1 计算机/数据库 5
计算机专业英语教程978-7-121-05646-8 35 张景祥 电子工业出版社 2009-2-5 计算机/专业英语 5
精通正则表达式 978-7-121-04684-1 75 Jeffrey E.F.Friedl 电子工业出版社 2007-7-19计算机/程序设计 10
正则表达式入门经典 978-7-302-18382-2 79.5 Andrew Watt 清华大学出版社 2008-10-1 计算机/程序设计 8这是我的存储过程:
create procedure count_books
@type char(20)
as
declare @count int
set @count=0
begin
select @count=@count+bookAmount
from books
where bookType=@type
print rtrim(@type)+'类书籍共有:'+cast(@count as char(2))+'册!'
end
作用是统计相同类型的书籍共有多少册!
调用过程:exec count_books '计算机/程序设计'
执行结果:计算机/程序设计类书籍共有:24册!但是当我在jdbc中调用时,总是会报异常,郁闷啊!import java.sql.*;public class DBConnect {
public static void main(String[] args) {
System.out.println(DBConnect.getConnection());
System.out.println(new DBConnect().getTotalAmount("计算机/程序设计"));
} public static Connection getConnection() {
Connection con = null;
String className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;databasename=Test";
String user = "sa";
String password = "sa";
try {
Class.forName(className);
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public ResultSet getTotalAmount(String type){
ResultSet rs=null;
try {
Connection con=getConnection();
String sql="{call count_books(?)}";
CallableStatement call=con.prepareCall(sql);
call.setString(1, type);
rs=call.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
}异常如下:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.我的水平相当一般,出现问题还希望能够得到大家的帮助,真诚地向大家学习,渴望高手能够帮我顺利解决,在这里我衷心地谢谢大家了!
这是我数据库(Test)中的一张表books:bookName bookISBN bookPrice bookAuthor publisher publisherDate bookType bookAmount
Java JDK实例宝典 978-7-121-03651-4 79 夏先波 电子工业出版社 2008-1-24 计算机/程序设计 2
JavaScript权威指南978-7-111-21632-2 109 David Flanagan 机械工业出版社 2007-8-14计算机/程序设计 4
SQL权威指南 978-7-111-22708-3 63.7 范德兰斯 机械工业出版社 2008-1-1 计算机/数据库 5
Oracle 10g宝典 978-7-121-01842-8 89 路川/胡欣杰 电子工业出版社 2006-1-1 计算机/数据库 5
计算机专业英语教程978-7-121-05646-8 35 张景祥 电子工业出版社 2009-2-5 计算机/专业英语 5
精通正则表达式 978-7-121-04684-1 75 Jeffrey E.F.Friedl 电子工业出版社 2007-7-19计算机/程序设计 10
正则表达式入门经典 978-7-302-18382-2 79.5 Andrew Watt 清华大学出版社 2008-10-1 计算机/程序设计 8这是我的存储过程:
create procedure count_books
@type char(20)
as
declare @count int
set @count=0
begin
select @count=@count+bookAmount
from books
where bookType=@type
print rtrim(@type)+'类书籍共有:'+cast(@count as char(2))+'册!'
end
作用是统计相同类型的书籍共有多少册!
调用过程:exec count_books '计算机/程序设计'
执行结果:计算机/程序设计类书籍共有:24册!但是当我在jdbc中调用时,总是会报异常,郁闷啊!import java.sql.*;public class DBConnect {
public static void main(String[] args) {
System.out.println(DBConnect.getConnection());
System.out.println(new DBConnect().getTotalAmount("计算机/程序设计"));
} public static Connection getConnection() {
Connection con = null;
String className = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url = "jdbc:sqlserver://localhost:1433;databasename=Test";
String user = "sa";
String password = "sa";
try {
Class.forName(className);
con = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
public ResultSet getTotalAmount(String type){
ResultSet rs=null;
try {
Connection con=getConnection();
String sql="{call count_books(?)}";
CallableStatement call=con.prepareCall(sql);
call.setString(1, type);
rs=call.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
}异常如下:java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.我的水平相当一般,出现问题还希望能够得到大家的帮助,真诚地向大家学习,渴望高手能够帮我顺利解决,在这里我衷心地谢谢大家了!
调用存储过程拿resultset到没做过,基本都是in和out的
试试
没有ResultSet可以提供。
/**
* 生成合同号
* @param appno 合同审核子流程的业务申请号
* @param conn 数据库连接
* @throws Exception
*/
public void generateContractCode(String appno,Connection conn)throws Exception{
try{
String call="{call pkg_tms_contract_manage.GENERATE_CONTRACT_CODE(?,?)}";
CallableStatement callableStatement=conn.prepareCall(call);
callableStatement.setString(1, appno);
callableStatement.registerOutParameter(2,Types.VARCHAR);
callableStatement.execute();
String error=callableStatement.getString(2);
if(error!=null&&!"".equals(error)){
throw new Exception(error);
}
}catch(Exception e){
throw e;
}
}
简单解释下:String call="{call pkg_tms_contract_manage.GENERATE_CONTRACT_CODE(?,?)}";
两个参数:第一个问号是需要传入的参数,String型的,第二个问号是执行后传出的参数,也是String型的,这个是存储过程执行过程中的报错信息,
callableStatement.registerOutParameter(2,Types.VARCHAR);--第二个参数是传出参数,需要注册一下,并设置这个参数的类型看了下你的存储过程,就是一个简单的查询,这个可以不用存储过程实现,
你要返回的是ResultSet,直接用Statement或PreparedStatement就行了,这样就可以获得你要的ResultSet,而且不容易出错用存储过程作查询,没这么用过。