java可调用语句.next

时间:2011-04-13 19:46:13

标签: java

我现在有这个:

public java.util.Vector getList() {

    java.util.Vector myuserList = new java.util.Vector();
    DbUtil db = null;
    java.sql.CallableStatement cstmt = null;
    ResultSet rset = null;


        db = new DbUtil();
        cstmt = db.prepareCall("{ call sample.user.get_user_list(?, ?, ?) }");

        cstmt.registerOutParameter(1,OracleTypes.CHAR);
        cstmt.registerOutParameter(2,OracleTypes.VARCHAR);
        cstmt.registerOutParameter(3,OracleTypes.CURSOR);

            cstmt.execute();

        }

        rset = (ResultSet) cstmt.getObject(3);
        if (rset != null) {
            while(rset.next()) {
                userBean myuser = new userBean();
                myuser.setuserid(rset.getString(1).trim());
                myuser.setuserName(rset.getString(2));


                myuserList.addElement(myuser);
            }
        }
                return myuserList;
             }

我希望在我的while(rset.next())下再添一个字符串ssn ..当我在myuser.setuserSSN(rset.getString(3));下添加myuser.setuserName(rset.getString(2));时,它给我错误..我已经更新了我的获取用户SSN的过程如何在这里获得ssn号码..我需要修改什么...还有一件事我通过使用游标cstmt.registerOutParameter(3,OracleTypes.CURSOR);获得所有三个userid,username和userSSN前两个可调用的语句是对于程序中的例外情况..请帮助

这是我得到的错误..

compile:
 [exec] com\javabean\userBean.java:188: cannot resolve symbol
 [exec] symbol  : variable myuser
 [exec] location: class com.javabean.userBean
 [exec]                                     myuser.setuserSSN(rset.getString(3));
 [exec]                                         ^
 [exec] 1 error

2 个答案:

答案 0 :(得分:0)

看起来userBean类没有方法setuserSSN。使用传统的情况,这将被写为'setUserSSN'(大写U)。如果存在setuserSSN方法,请检查它是否需要单个String参数。

除非你有一些既定的约定,否则userBean可能最好重命名为UserBean,因为类通常以大写字母开头。

答案 1 :(得分:0)

您没有从存储过程中选择SSN。你有三个输出参数,1 =用户ID,2 =用户名,3 =光标。当您尝试添加(rset.getString(3));时,它会尝试将光标设置为字符串并将其传递给set SSN方法。试试这个:

public java.util.Vector getList() { 

java.util.Vector myuserList = new java.util.Vector(); 
DbUtil db = null; 
java.sql.CallableStatement cstmt = null; 
ResultSet rset = null; 


    db = new DbUtil(); 
    cstmt = db.prepareCall("{ call sample.user.get_user_list(?, ?, ?, ?) }"); 

    cstmt.registerOutParameter(1,OracleTypes.CHAR); 
    cstmt.registerOutParameter(2,OracleTypes.VARCHAR); 
    cstmt.registerOutParameter(3,OracleTypes.VARCHAR);
    cstmt.registerOutParameter(4,OracleTypes.CURSOR); 

        cstmt.execute(); 

    } 

    rset = (ResultSet) cstmt.getObject(4); 
    if (rset != null) { 
        while(rset.next()) { 
            userBean myuser = new userBean(); 
            myuser.setuserid(rset.getString(1).trim()); 
            myuser.setuserName(rset.getString(2)); 
            myuser.setuserSSN(rset.getString(3));

            myuserList.addElement(myuser); 
        } 
    } 
            return myuserList; 
         } 

并确保存储过程选择SSN。

我正在学习如何自己使用存储过程,但是在使用查询字符串时,您可以按名称引用返回的字段。我还没有掌握这个,但我认为你可以只返回光标,然后设置你的userBean变量,如:myuser.setuserid(rset.getString("userID").trim()); myuser.setuserName(rset.getString("username"));等。