Java Beans - тип возврата - PullRequest
       1

Java Beans - тип возврата

1 голос
/ 23 марта 2012

Я работаю над небольшим веб-приложением Java EE.У меня проблема связана с оператором SQL.

I have entities messaging and users.

I have a method- getMessagesById(int msgid)

    public Messaging getMessagesByMid(int msgid) {

            String query = "SELECT msgid, msgsubject, msgcontent, timestamp, fname, lname FROM messaging INNER JOIN users ON messaging.users_userid=users.userid WHERE msgid=?;";

            try {
                PreparedStatement ps = conn.prepareStatement(query);
                ps.clearParameters();
                ps.setInt(1, msgid);

                ResultSet rs = ps.executeQuery();
                Messaging m= new Messaging();
                Users u= new Users();
                while (rs.next()) {
                    m.setMsgid((rs.getInt(1)));
                    m.setMsgsubject(rs.getString(2));
                    m.setMsgcontent(rs.getString(3));
                    m.setTimestamp(rs.getString(4));
                    m.setMsgrecipient(rs.getInt(5));
                    m.setUsers_userid(rs.getInt(6));
                    u.setFname(rs.getString(7));
                    u.setLname(rs.getString(8));
                }

                return m;
            } catch (Exception e) {
                System.out.println(e);
                return null;
            }
        }

Проблема в том, как я возвращаю 2 типа данных ??обмен сообщениями и боб ..

Ответы [ 3 ]

4 голосов
/ 23 марта 2012

в Java вы не можете сделать это.

Вместо этого попробуйте создать новый простой объект, содержащий как Messaging, так и Users

Например

public class MessageBox{
    private Messaging m;
    private Users u;

    //getters and setters for both values
    public Messaging getMessage(){
        return m;
    }
}

, а затем

ResultSet rs = ps.executeQuery();
Messaging m= new Messaging();
Users u= new Users();
MessageBox mb = new MessageBox();  //<-------

...
m.setTimestamp(rs.getString(4));
m.setMsgrecipient(rs.getInt(5));
m.setUsers_userid(rs.getInt(6));
u.setFname(rs.getString(7));
u.setLname(rs.getString(8));
mb.setMessage(m);  //<-----------
mb.setUsers(u);  //<----------
...
return mb;  //<------------
1 голос
/ 23 марта 2012

Создать класс держателей для обоих типов

class MessagingAndUsers
{
  private final Messaging m;
  private final Users u;

  MessagingAndUsers( Messaging m, Users u )
  {
    this.m = m;
    this.u = u;
  }

  // Getters
}

Теперь вернемся к вашему методу. Прежде всего, похоже, что он должен вернуть список, а не одно значение

public List<MessagingAndUsers> getMessagesByMid(int msgid) {

    String query = "SELECT msgid, msgsubject, msgcontent, timestamp, fname, lname FROM messaging INNER JOIN users ON messaging.users_userid=users.userid WHERE msgid=?;";

    PreparedStatement ps = conn.prepareStatement(query);
    try {
        ps.clearParameters();
        ps.setInt(1, msgid);

        ResultSet rs = ps.executeQuery();
        ArrayList<MessagingAndUsers> retVal = new ArrayList<MessagingAndUsers>();

        while (rs.next()) {
            Messaging m= new Messaging();
            Users u= new Users();
            m.setMsgid((rs.getInt(1)));
            m.setMsgsubject(rs.getString(2));
            m.setMsgcontent(rs.getString(3));
            m.setTimestamp(rs.getString(4));
            m.setMsgrecipient(rs.getInt(5));
            m.setUsers_userid(rs.getInt(6));
            u.setFname(rs.getString(7));
            u.setLname(rs.getString(8));

            retVal.add( new MessagingAndUsers( m, u ) );
        }

        return retVal;
    } catch (Exception e) {
        System.out.println(e);
        return null;
    }
    finally
    {
       ps.close( );
    }
}
0 голосов
/ 23 марта 2012

Вы можете передать его в функцию в качестве аргумента, а затем вызвать сеттеры внутри функции

...