вызываемая инструкция java .next

#java

#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;
             }
  

Я хочу получить еще одну строку ssn в моем while(rset.next()) .. когда я просто добавляю это myuser.setuserSSN(rset.getString(3)); в myuser.setuserName(rset.getString(2)); , это выдает ошибку.. я уже обновил свою процедуру для получения SSN пользователя, так как я могу получить этот номер ssn здесь.. что мне нужно изменить .. еще одна вещь, которую я получаю все три идентификатора пользователя, имя пользователя и userSSN с помощью курсора cstmt.registerOutParameter(3,OracleTypes.CURSOR); первые два вызываемых состояния предназначены для исключений в процедуре.. пожалуйста, помогите

вот ошибка, которую я получаю..

 compile:
 [exec] comjavabeanuserBean.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
  

Комментарии:

1. По-прежнему недостаточно информации об ошибке. Пожалуйста, покажите нам, что находится выше того, что вы опубликовали здесь.

2. Первая строка ошибки отсутствует.

Ответ №1:

Похоже, что у userBean класса нет метода setuserSSN . Используя обычный регистр, это было бы записано как ‘setUserSSN’ (в верхнем регистре U ). Если существует setuserSSN метод, убедитесь, что он принимает один String аргумент.

Если у вас нет какого-либо установленного соглашения, userBean вероятно, лучше переименовать в UserBean , поскольку классы обычно начинаются с верхнего регистра.

Комментарии:

1. у меня уже есть все это: public userBean() { userid = new String(); userName = new String(); userSSN = new String(); } public String getuserid() { return userid; } public void setuserid(String s) { userid = s; } public String getuserName() { return userName; } public void setuserName(String s) { userName = s; } public String getuserSSN() { return userSSN; } public void setuserSSN(String s) { userSSN = s; }

2. А, понятно. Перепроверяя OP, появляется сообщение об ошибке myuser . Добавляете ли вы вызов setuserSSN непосредственно под другими вызовами? Убедитесь, что между ними нет закрывающих фигурных скобок. Похоже, что myuser это выходит за рамки.

3. да, я ничего там не меняю .. если я удалю userSSN .. это работает отлично

Ответ №2:

Вы не выбираете SSN из хранимой процедуры. У вас есть три параметра out: 1 = идентификатор пользователя, 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.

Я только учусь самостоятельно использовать хранимые процедуры, но при использовании строки запроса вы ссылаетесь на возвращаемые поля по имени. Я еще не освоил это, но я думаю, вы можете просто вернуть курсор, а затем установить свои пользовательские переменные следующим образом: myuser.setuserid(rset.getString("userID").trim()); myuser.setuserName(rset.getString("username")); и т.д.