package commitb;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.Random;public class MyBean {
String billid;
private double total;
public double getTotal() {
return total;
} public void setTotal(double total) {
this.total = total;
}
public void addTotal(double total) {
this.total += total;
} public ArrayList<SaleItem> bill = new ArrayList<SaleItem>();
public Connection conn;
public Statement st; public MyBean() {
connectDB();
bill.add(new SaleItem(1, 20));
bill.add(new SaleItem(2, 20));
bill.add(new SaleItem(1, 20));
show();
} public ArrayList<SaleItem> getBill() {
return bill;
}
/*
 * CREATE TABLE Sale
(
SaleId CHAR(9) PRIMARY KEY,
Salename CHAR(20),
Saleprize FLOAT
);
INSERT INTO Sale
VALUES('1','RICE',23.2);

CREATE TABLE Bill
(
BillId CHAR(9) PRIMARY KEY,
SaleId CHAR(9),
QUANTITY SMALLINT,
FOREIGN KEY (SaleId) REFERENCES Sale(SaleId)
);
 */
//问题在这个函数中 每次循环,只有与第一次查询结果一样的地方才会找到查询结果,其他查询不能找到结果
public void show() {
int x = 0;
setTotal(0.0);

while (x < bill.size()) { //Salename,Saleprize
String query = "SELECT Salename,Saleprize FROM Sale WHERE SaleId = "
+ bill.get(x).getId();
try {
//st = conn.createStatement();
ResultSet rs;
rs = st.executeQuery(query);

// rs = st.getResultSet();
rs.next();
// System.out.println(rs.getString(1));
// System.out.println(rs.getFloat(2));
bill.get(x).setName(rs.getString(1));
bill.get(x).setPrize(rs.getFloat(2));
//st.close();
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//addTotal(bill.get(x).getSale());
x++;
}
} public String ensureBill() {
int index = 0;
billid = "" + new Date().toString()+ new Random().nextInt(9999);
while(index < bill.size())
{
String addDB = "INSERT INTO Bill VALUES("+billid +"," + bill.get(index).getId()+"," +bill.get(index).getQuantity()+")";
try {
st.executeUpdate(addDB);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "fail";
}
index++;
}
return "sucess";
} public void connectDB() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1522:orcl1"; // orcl为数据库的SID
String name = "system";
String pw = "a123";
conn = DriverManager.getConnection(url, name, pw);
st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

public void insertBill()
{

}
}错误在show()函数中
问题在这个函数中 每次循环,只有与第一次查询结果一样的地方才会找到查询结果,其他查询不能找到结果比如第一次找的是saleid=1的,第二个找saleid=2的,第三个找saleid=1的,于是,只有第一个和第第三个可以找到想要结果,第二个异常抛出  java.sql.SQLException: 结果集已耗尽 
但是数据库中确实有这个元素,把与执行的语句放到sqlplus中执行,是可以找到结果的。 求解~
谢了