关于表变量和临时表返回结果集的问题,tomcat报错:“该语句没有返回结果集” 本帖最后由 killerggf 于 2010-02-04 00:13:57 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public ArrayList Bylw_chazhaozhuanye(String dlfzr){ db = new ConnectDB(); //创建并实例化一个ArranyList变量 ArrayList fuzezhuanye=new ArrayList(); String sql="exec by_zwx_cyt_ckzy @zyfzr='"+dlfzr+"'"; //调用db.read(sql)方法执行sql语句 ResultSet rs = db.Read(sql); try { //判断rs是否用结果集 while(rs.next()){ vo=new Bylw_fzr_actionform(); vo.setZydm(rs.getString("zydm")); vo.setZymc(rs.getString("zymc")); fuzezhuanye.add(vo); } } catch (SQLException e) { e.printStackTrace(); } db.closed(); return fuzezhuanye; }红色那句有问题? String sql="exec by_zwx_cyt_ckzy @zyfzr='"+dlfzr+"'"; 我想应该是跟表变量返回的结果集的类型有关,可能是ResultSet不能识别表变量返回的结果集类型。不是很了解ResultSet的用法,不知道是不是,不知道表变量返回的结果集类型跟一般的查询一个正式表所返回的结果集类型是不是相同的。 弄了两天,终于解决问题了,解铃还需系铃人,还是靠自己才行,说一下原因吧,免得后来人也要弄得那么烦。其实原因很简单的,就是Statement的问题,开始的时候我是用以下方法去返回ResultSet的:(注意rs = stm.executeQuery(sql);) public ResultSet Read(String sql){ if(sql==null)sql=""; getStmed(); ResultSet rs=null; try { //System.out.println("sql:" + sql); rs = stm.executeQuery(sql); } catch (SQLException e) { rs=null; e.printStackTrace(); System.out.println("查询数据库失败!"); } return rs; }用上面方法去执行我上面提到的存储过程的话,tomcat就会报错:该语句没有返回结果集。**********************************************************************************但是后来我把public ResultSet Read(String sql)改成了这样:注意(stm.execute(sql); rs = stm.getResultSet();) public ResultSet Read_execute(String sql){ if(sql==null)sql=""; getStmed(); ResultSet rs=null; try { stm.execute(sql); rs = stm.getResultSet(); } catch (SQLException e) { rs=null; e.printStackTrace(); System.out.println("查询数据库失败!"); } return rs; }这样tomcat就不会报“该语句没有返回结果集”的错了***********************************************************原因总结:1、execute(String sql) : 执行给定的 SQL 语句,该语句可能返回多个结果。2、executeQuery(String sql) : 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。好啦!问题解决了,是散分的时候了..... 不允许对系统目录进行即席更新 关于LEFT JOIN的一个问题 这个SQL语句为什么错误? 链接服务器更新数据使用事务会报"分布式事务出错"。 请教怎样使用sql server 2008的全文搜索功能搜索pdf类型文件 谁有关于 SQL Reference 的书籍???? 请问:这条SQL语句应该怎么解决,非常着急,谢谢DX了 碰到一个SQL Server简繁体之间复制的问题想向各位请教 关于存储过程的,请高手看过来:这样写这么不对??? 十万火急,帮我写一个SQL语句 Sql 触发器逻辑 Mysql 中 varchar 最多可以装多字符串
public ArrayList Bylw_chazhaozhuanye(String dlfzr){
db = new ConnectDB();
//创建并实例化一个ArranyList变量
ArrayList fuzezhuanye=new ArrayList(); String sql="exec by_zwx_cyt_ckzy @zyfzr='"+dlfzr+"'";
//调用db.read(sql)方法执行sql语句
ResultSet rs = db.Read(sql);
try {
//判断rs是否用结果集
while(rs.next()){
vo=new Bylw_fzr_actionform();
vo.setZydm(rs.getString("zydm"));
vo.setZymc(rs.getString("zymc"));
fuzezhuanye.add(vo);
}
} catch (SQLException e) {
e.printStackTrace();
}
db.closed();
return fuzezhuanye;
}红色那句有问题?
public ResultSet Read(String sql){
if(sql==null)sql="";
getStmed();
ResultSet rs=null;
try {
//System.out.println("sql:" + sql);
rs = stm.executeQuery(sql);
} catch (SQLException e) {
rs=null;
e.printStackTrace();
System.out.println("查询数据库失败!");
}
return rs;
}
用上面方法去执行我上面提到的存储过程的话,tomcat就会报错:该语句没有返回结果集。**********************************************************************************
但是后来我把public ResultSet Read(String sql)改成了这样:注意(stm.execute(sql);
rs = stm.getResultSet();) public ResultSet Read_execute(String sql){
if(sql==null)sql="";
getStmed();
ResultSet rs=null;
try {
stm.execute(sql);
rs = stm.getResultSet();
} catch (SQLException e) {
rs=null;
e.printStackTrace();
System.out.println("查询数据库失败!");
}
return rs;
}这样tomcat就不会报“该语句没有返回结果集”的错了***********************************************************
原因总结:
1、execute(String sql) :
执行给定的 SQL 语句,该语句可能返回多个结果。
2、executeQuery(String sql) :
执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
好啦!问题解决了,是散分的时候了.....