【问题标题】:query to get userimage path and user information from two different tables查询从两个不同的表中获取用户图像路径和用户信息
【发布时间】:2012-03-23 22:31:15
【问题描述】:

我正在开发一个相册 Web 应用程序,其中我使用两个表 USER_INFORMATIONUSER_PHOTOUSER_INFORMATION 只包含一条记录的用户记录,USER_PHOTO 包含来自单个用户的多张照片。我想获取用户信息的数量以及他们的 userimage 路径并将其存储到 Java Pojo 变量(如列表)中,以便我可以使用 struts 2 中的显示标签显示它。

表格是这样的。

        USER_PHOTO                                   USER_INFORMATION
   =======================                     =================================
   | IMAGEPATH | USER_ID |                     | USER_NAME | AGE | ADDRESS |ID |
   =======================                     =================================
   |xyz        | 1       |                     | abs       | 34  |  sdas   | 1 | 
   |sdas       | 1       |                     | asddd     | 22  | asda    | 2 |
   |qwewq      | 2       |                     | sadl      | 121 | asd     | 3 |
   | asaa      | 1       |                     ==================================
   | 121       | 3       | 
   =======================

如您所见,user_id=1 有 3 张照片,user_id=2 有 2 张照片,3 有一张照片。现在我想编写查询来获取用户信息以及他们的图像路径。

所以我尝试使用下面的代码将其存储在 ArrayList 中,我的代码在 Action 类中:

 public ArrayList loadData() throws ClassNotFoundException, SQLException {
ArrayList userList = new ArrayList();
con = DriverManager.getConnection(url + dbName, userName, password);
PreparedStatement ps = null;
try {
    String name;
    String fatherName;
    int Id;
    String filePath;
    int age;
    String address;
    String query = "SELECT NAME,FATHERNAME,AGE,ADDRESS,ID,FILEPATH FROM USER_INFORMATION ,USER_PHOTO WHERE ID=USER_ID";
    ps = con.prepareStatement(query);
    ResultSet rs = ps.executeQuery();
    while (rs.next()) {
        name = rs.getString(1);
        fatherName = rs.getString(2);
        age = rs.getInt(3);
        address = rs.getString(4);
        Id = rs.getInt(5);
        UserData list = new UserData();
        list.setName(name);
        list.setFatherName(fatherName);
        list.setAge(age);
        list.setAddress(address);
        userList.add(list);
    }
    ps.close();
    con.close();

我的 JSP 是这样的:

<display:table id="data" name="sessionScope.UserForm.userList" requestURI="/userAction.do" pagesize="1" >
  <display:column property="name" title="NAME" sortable="true"   />
  <display:column property="fatherName" title="User Name" sortable="true"  />
  <display:column property="age" title="AGE" sortable="true"   />
  <display:column property="address" title="ADDRESS" sortable="true"  />
  <display:column property="filePath" title="PATH" sortable="true"  />
</display:table>

所以当我显示它时,它会正确显示每个用户信息,但路径列是空白的。

预期输出:我想显示用户信息名称、年龄、地址和 IMAGEPATH(在另一个表中不止一条记录)。

【问题讨论】:

  • 您使用的是什么数据库?当一个用户有多个图片路径时,是否要使用所有图片路径,第一个,最后一个?
  • Java db 我想获取所有图片路径
  • 您将如何显示它们?表的“filePath”列中的所有路径都作为逗号分隔值?
  • 我已经阅读了关于 GROUP_CONCAT() 函数的一些内容,我打算用它来连接字符串变量并设置它。 @beny23

标签: java sql database struts2


【解决方案1】:

一个小技巧:从结果集中读取数据时,使用列名而不是它们的索引。 示例:fatherName = rs.getString("FATHERNAME");

如果您更改查询,这将更容易维护并且更清晰。

现在,您在代码的哪个位置阅读 FILEPATH 列?!您只读取了前五列(name、father_name、age、address、id),但没有读取 FILEPATH 列。

【讨论】:

  • 实际上我删除了该行,它是这样的。filePath=rs.getString(6); 当我显示它时,名称年龄父亲名称地址将重复所有文件路径。详细说明如果用户有 6 个文件路径,则将显示 6 条记录,信息相同,但文件路径值不同
猜你喜欢
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2021-07-16
  • 1970-01-01
相关资源
最近更新 更多