数据库中的存储过程如下:
create procedure ishava
@accountNew varchar(10)
as
begin
if(@accountNew in (select accountid from userCount))
   begin
print'该账户存在'
   end
else
   begin
print'不存在该账户'
   end
end--执行存储过程
exec ishava '111'   在数据库中打印出:该账户存在......用java语言调用该存储过程如下:
public boolean ishave(String account) throws SQLException{
Connection connection = new Database().getConn();
CallableStatement cllStmt;
cllStmt = connection.prepareCall("{call ishava(?)}");
cllStmt.setString(1, account);
boolean flag=cllStmt.execute();
System.out.println(account);
if(flag){
return true;
}else{
return false;
}
}
public static void main(String a[]){
UserDaoNew udn=new UserDaoNew();
try {
System.out.println(udn.ishave("111"));
} catch (SQLException e) {
e.printStackTrace();
}
}
控制台输出内容如下:
false不明白:
控制台应该输出true才对,为什么是输出false呢?

解决方案 »

  1.   

    应该是JAVA中传入的值与你测试时传入的值不同导致。
      

  2.   

    可能是JAVA的问题了,建议楼主到JAVA版问问。
      

  3.   

    放到JAVA版问会比较快得到结果。
      

  4.   

    create procedure ishava
    (
      @accountNew varchar(10) 
    )
    as 
    begin if(@accountNew=(select accountid from userCount)) 
      begin 
    print'该账户存在' 
      end 
    else 
      begin 
    print'不存在该账户' 
      end 
    end
      

  5.   

    先在数据库运行你的proc看有没错
    在再程序debug
      

  6.   

    返回:
    如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false 
      

  7.   

    execute
    boolean execute()
                    throws SQLException在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些预处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQuery 和 executeUpdate 处理形式更简单的语句。 
    execute 方法返回一个 boolean 值,指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法获取该结果,必须调用 getMoreResults 获取任何后续结果。 
    回:
    如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false
     
    抛出: 
    SQLException - 如果发生数据库访问错误;在关闭的 PreparedStatement 上调用此方法,或者为此方法提供了参数
    另请参见:
    Statement.execute(java.lang.String), Statement.getResultSet(), Statement.getUpdateCount(), Statement.getMoreResults()