I have written a method stub where in I have this SQL query in PreparedStatement so far:
PreparedStatement ps = connection.prepareStatement("SELECT id,itemId,userId, sum(I.price) as totalAmount FROM dbo.Orders o
join dbo.Items I on o.itemId = I.id join dbo.Users u on o.UserId = u.Id where o.id = ?");
ps.setInt(1, id);
Requirement: to retrieve different values of Items for given order Id and add them to an arrayList.Here is what my method looks like so far: But having nested subquery looks redundant to me. Is there a better way to do it? So, basically, I am trying to get values from database into an arraylist. In table order, there can be multiple items per userId , so I am trying to create an arraylist of arraylist , where inner araylist contains all items per userId and outer arraylist contains userid and corresponding fields.
public ArrayList<Orders> GetOrders(Connection connection) throws Exception
{
ArrayList<Orders> feedData = new ArrayList<Orders>();
ArrayList<Integer> itemsId = new ArrayList<Integer>();
//How do I get items in this arraylist since there could be multiple items for a given order ?
public ArrayList<Orders> GetOrders(Connection connection, int id) throws Exception
{
ArrayList<Orders> feedData = new ArrayList<Orders>();
ArrayList<Integer> itemsId = new ArrayList<Integer>();
try
{
PreparedStatement ps = connection.prepareStatement("SELECT o.id, o.userId, sum(I.price) as totalAmount FROM dbo.Orders o join dbo.Items I on o.itemId = I.id join dbo.Users u on o.UserId = u.Id where o.id = ?");
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
while(rs.next())
{
Orders o = new Orders();
o.setId(rs.getInt("id"));
ps = connection.prepareStatement("SELECT itemId FROM dbo.Orders o where o.id = ?");
ps.setInt(1, id);
ResultSet rs2 = ps.executeQuery();
while(rs2.next()){
itemsId.add(rs.getInt("itemId"));
}
o.setItem(itemsId);
o.setUserId(rs.getInt("price"));
o.setTotalAmount(rs.getInt("totalAmount"));
feedData.add(o);
}
return feedData;
}
catch(Exception e)
{
throw e;
}
}
}
Edit:
Database schema:
create table Users
(
Id int not null primary Key identity(1,1) constraint fk_UserId_Id references Orders(UserId),
name nvarchar(50),
phone nvarchar(10)
);
create table Items
(
Id int not null primary Key identity(1,1) constraint fk_item_Id references Orders(ItemId),
name nvarchar(50),
Price int
);
create table Orders
(
id int not null primary Key identity(1,1),
ItemId int,
UserId int,
);