Java bean-返回类型

时间:2012-03-23 16:24:34

标签: java mysql javabeans

我正在开发一个小型Java EE Web应用程序。我遇到的问题与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种数据类型?消息传递和bean ..

3 个答案:

答案 0 :(得分:4)

在Java中,你不能这样做。

相反,请尝试创建一个包含MessagingUsers

的新简单对象

例如

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 :(得分:1)

为两种类型创建持有者类

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

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

  // Getters
}

现在,回到你的方法。首先,看起来它需要返回一个List,而不是一个值

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( );
    }
}

答案 2 :(得分:0)

您可以将其作为参数传递给函数,然后在函数

中调用setter