如何从数据库中检索特定数据并显示?
String sql = "Select Product_ID,Order_Quantity,Sub_Total from Order_Menu Where Order_ID='"+order_id_1+"'";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
while(rs.next()){
list.add(rs.getString("Product_ID"));
list.add(rs.getString("Order_Quantity"));
list.add(rs.getString("Sub_Total"));
for(int i = 0;i<list.size();i++){
String item = list.get(i);
System.out.println("Item" + i + ":" + item);
}
我定义了数组
ArrayList <String> list = new ArrayList<String>();
我的输出
Item0:P0001
Item1:1
Item2:37.0
Item0:P0001
Item1:1
Item2:37.0
Item3:P0002
Item4:2
Item5:666.0
我的数据库只包含2个项目,即P0001和P0002,为什么结果会再显示1个项目 对不起,我对阵列有点混淆
答案 0 :(得分:2)
每次从结果集添加记录时,都会打印整个列表内容。
在第一次迭代中,list.size() == 3
,因此它打印:
Item0:P0001 Item1:1 Item2:37.0
在第二次迭代中,list.size() == 6
,打印出来:
Item0:P0001 Item1:1 Item2:37.0 Item3:P0002 Item4:2 Item5:666.0
从而进行最终输出:
Item0:P0001 Item1:1 Item2:37.0 Item0:P0001 Item1:1 Item2:37.0 Item3:P0002 Item4:2 Item5:666.0
在while语句之外移动for循环应修复它。
while(rs.next()){
list.add(rs.getString("Product_ID"));
list.add(rs.getString("Order_Quantity"));
list.add(rs.getString("Sub_Total"));
}
for(int i = 0;i<list.size();i++){
String item = list.get(i);
System.out.println("Item" + i + ":" + item);
}
答案 1 :(得分:1)
首先,这不是使用PreparedStatement
的正确方法。您应该按照以下方式使用它:
String sql = "Select Product_ID,Order_Quantity,Sub_Total from Order_Menu Where Order_ID=?";
pst = conn.prepareStatement(sql);
pst.setString(order_id_1);
rs = pst.executeQuery();
现在,输出的原因。
您正在list
添加记录,假设在每个列表索引中只放置一个产品。但事实并非如此。例如,如果您的程序获得了产品P0001
,那么您将在索引p001
添加0
,在索引1
添加Order_Quantity 1
并在小计37
添加在索引2
。所以,你得到这样的输出。我建议你为Product
创建一个单独的类,如下所示:
class Product
{
String product_id;
String order_quantity;
String sub_total;
public Product(String product_id, String order_quantity, String sub_total)
{
this.product_id = product_id;
this.order_quantity = order_quantity;
this.sub_total = sub_total;
}
public void setProduct_id(String product_id)
{
this.product_id = product_id;
}
public void setOrder_quantity(String order_quantity)
{
this.order_quantity = order_quantity;
}
public void setSub_total(String sub_total)
{
this.sub_total = sub_total;
}
public String getProduct_id()
{
return product_id;
}
public String getOrder_quantiy()
{
return order_quantity;
}
public String getSub_total()
{
return sub_total;
}
@Override
public boolean equals(Object obj)
{
if ( obj instanceof Product)
{
temp = (Product)obj;
if (product_id.equals(temp.product_id))
{
return true;
}
}
return false;
}
@Override
public int hashCode()//override it in such a way so that you get different hashCode for each product ID.
{
return product_id.hashCode();
}
@Override
public String toString()
{
return "product_id:"+product_id+", order_quantity:"+order_quantity+", sub_total:"+sub_total;
}
}
最后,您可以使用Product
类的对象,如下所示:
List<Product> list = new ArrayList<Product>();
while(rs.next()){
Product product = new Product(rs.getString("Product_ID"),rs.getString("Order_Quantity"),rs.getString("Sub_Total"));
list.add(product);
}
for(int i = 0;i<list.size();i++){
Product item = list.get(i);
System.out.println("Item" + i + ":" + item);
}
答案 2 :(得分:0)
您没有在迭代之间清除列表。这意味着当您处理第一行时,您的列表将包含三个项目,当您显示第二行时,您的列表将包含第一行和第二行中的项目......
你为什么不忘记这个清单而只是
for (int i = 0; rs.next(); ++i){
System.out.println("Item " + i);
System.out.println("Product ID : " + rs.getString("Product_ID"));
System.out.println("Order Quantity: " + rs.getString("Order_Quantity"));
System.out.println("Sub_Total : " + rs.getString("Sub_Total"));
}
当然不要忘记将整件事情包裹在try
finally
中并且:
rs.close();
pst.close();
答案 3 :(得分:0)
确保您在数组列表之外迭代列表
while(){
//implementation
}
for(){
//Iterate your list
}
答案 4 :(得分:0)
假设您的数据库表如下:
Product_ID Order_Quantity Sub_Total
P0001 1 37.0
P0002 2 666.0
您的while循环将元素添加到列表中:
第一次迭代:
list=["P0001","1","37.0"]
第二次迭代:
list=["P0001","1","37.0","P0002","2","666.0"]
所以当while循环第一次执行时, 您将获得输出:
Item0:P0001
Item1:1
Item2:37.0
在第二次迭代中,因为list是[“P0001”,“1”,“37.0”,“P0002”,“2”,“666.0”],所以你得到了进一步的输出。
Item0:P0001
Item1:1
Item2:37.0
Item3:P0002
Item4:2
Item5:666.0
结合上述两个输出,你得到:
Item0:P0001
Item1:1
Item2:37.0
Item0:P0001
Item1:1
Item2:37.0
Item3:P0002
Item4:2
Item5:666.0
所以你需要二维数据结构。我建议在列表中添加一维字符串数组:
String sql = "Select Product_ID,Order_Quantity,Sub_Total from Order_Menu Where Order_ID='"+order_id_1+"'";
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
String[] row=new String[3]
while(rs.next()){
row[0]=rs.getString("Product_ID");
row[1]=rs.getString("Order_Quantity");
row[2]=rs.getString("Sub_Total");
list.add(row);
}