Java 从数据库中检索下一个相似项目

Java retrieve next similar item from database

我有以下一段代码:

    Class.forName("oracle.jdbc.driver.Orac.   leDriver");

  Connectioncon=DriverManager.getCon.  nection       ("jdbc:oracle:thin:@localhost1521:","sys.   tem","zed");

 String pb=pricebox.getText();

 int pbs=Integer.parseInt(pb);

final PreparedStatement             ps=con.prepareStatement("selectitem   code,remaining    fromshoppingmallproducts   wheretype='"+typebox.getSelectedIte(+.    "',brand='"+brandbox.getSelectedIt.  +'"');

   final      PreparedStatementps=con.prepareStat.    ement("select     itemcode,remainingfrom     shoppingmallproducts where type=and        brand=? and price>=?");



  ps.setString(1(String)typebox.getSelect.     editem();
  ps.setString(2,          (String)brandbox.getSelectedItem());


ps.setInt(3,pbs);


 final ResultSet     rs=ps.executeQuery();
rs.next();

itm=rs.getString("itemcode");


int rem=rs.getInt("remaining");

final String     remm=String.valueOf(rem);


jta1.append("\n "+itm+"\n"+rem+"\n");

// jta是用来追加数据的jtextpane的名字

next.addActionListener(new     ActionListener()

{
public void

 actionPerformed(ActionEvent as)
{
try {


jta1.removeAll();

jta1.setText("");

rs.next();


String itm=rs.getString("itemcode");



int prc=rs.getInt("price");




int rem=rs.getInt("remaining");


String remm=String.valueOf(rem);




jta1.append("\n "+itm+"\n"+rem.   +"\n");


  drawimage(itm);



 }

现在这个问题属于我的下一个按钮。 如您所见,下一步按钮会将结果集对象移动到下一行。但我希望它以另一种方式执行。现在假设,我选择 Levis 作为价格区间为 2000 的品牌休闲鞋。现在假设我有 3 个这样的产品。当我第一次点击 go 按钮时,它会显示第一个结果。现在我希望当我单击下一步时,我想要第二个具有指定功能的产品,然后是第三个产品。 有什么办法吗?请帮我。我真的坚持这个,因为这是我大学项目的最后一项任务。 我希望我已经清楚地解释了每一件事。谢谢

你的问题不是很清楚。不过我会尽量根据我的理解来回答。

首先关于 rs.next();

这个游标是一个指针,指向ResultSet中的一行数据。最初,游标位于第一行之前。 ResultSet.next 方法将光标移动到下一行。如果光标位于最后一行之后,此方法 returns false。

因此 rs.next() 指向从 运行 您的查询中获得的结果。假设您的 table 总共有 10 行,然后您的查询 return 有 5 行,具体取决于您在查询中指定的条件(如品牌、价格等)。在这种情况下,rs 将指向为您的查询编辑的 5 行 return。它将指向结果第一行之前。当你做 rs.next();结果应该 return 5 行中的第一行 return。以后每个 rs.next() 都会 return 5 个结果行的下一行。当 rs 指向第 5 行并且您执行 rs.next() 时它将 return false 并且您将知道没有更多的行存在 returned.

如果您没有以这种方式获得价值,最可能的原因是您的查询。尝试使用代码

从查询中打印出所有 return 行
while (rs.next()) {
            int itm = rs.getString("itemcode");
            int price = rs.getString("price");
            int remaining = rs.getString("remaining");

            System.out.println(itm + "\t" + price +
                               "\t" + remaining );
        }

这会将结果打印到控制台供您调试。

如果打印的结果正确,那么您的查询是正确的。可能问题是 jtextpane 中的 rs 值不正确,没有正确指向它应该的位置。

PS : 可变类型的价格应该是双倍的 此外,如果您的问题只是关于 returned 结果的顺序,您可以在查询中使用 ORDER BY。它将允许根据 table

的排序顺序(基于列的升序或降序)对结果进行 returned