我正在开发一个小型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 ..
答案 0 :(得分:4)
相反,请尝试创建一个包含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 :(得分: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