如何在不使用Java中的Class创建Object的情况下获取MySQL数据

时间:2011-12-12 16:54:17

标签: java mysql jdbc

我想从MySQL获取数据而不从类

创建对象

通常我会做类似

的事情
public ArrayList getInventoryByItemId(String ItemId) throws SQLException {
    ArrayList list = new ArrayList<Inventory>();
    String sql = "SELECT iid, i.uid, item_data, item_id, i.ctime, username, gender FROM Inventory i JOIN user u ON i.uid = u.uid WHERE item_id = '"+ItemId+"'";
    Statement stmt = con.createStatement();
    ResultSet rset = stmt.executeQuery(sql);
    while (rset.next()) {
        a = new Inventory(rset.getInt(1), rset.getInt(2), rset.getString(3), rset.getString(4), rset.getTimestamp(6), rset.getString(7), rset.getString(8));
        list.add(a);
    }
    return list;
}

问题是因为Inventory对象没有来自加入的用户表的用户数据,我无法创建新的Inventory

我只想自动创建一个具有所有数据属性的对象,我可以使用列名访问它。

谢谢

2 个答案:

答案 0 :(得分:2)

如果我遇到问题,

您可以创建新地图(HashMap I reccomend)并使用列名或索引作为键来放置值。 因此,您的列表将是地图列表。

 while (rset.next()) {
        a = new HashMap<Integer,Object>();
        a.put(1,rset.getInt(1));
        ..........
        list.add(a);
    }

或者,如果您知道确切的列数,则可以使用用户数组而不是Map(它会更快)

答案 1 :(得分:0)

根据您所说的内容,我认为您的查询不会返回数据,因为库存中没有与其连接的用户数据。您需要修改查询以使用左外连接。

String sql = "SELECT iid, i.uid, item_data, item_id, i.ctime, username, gender FROM Inventory i LEFT JOIN user u ON i.uid = u.uid WHERE item_id = '"+ItemId+"'"

这将允许您的查询返回库存数据,即使相应的用户数据不存在。