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

时间:2015-04-27 10:40:23

标签: java swing jdbc

我有以下代码:

    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按钮时,它将显示第一个结果。现在我希望当我点击下一步时,我希望第二个产品具有指定功能,因此第三个产品。 有没有办法做到这一点?请帮我。我真的很困惑,因为这是我大学项目的最后一项任务。 我希望我已经清楚地解释了每一件事。感谢名单

1 个答案:

答案 0 :(得分:0)

你的问题不是很清楚。但我会尝试从我的理解中回答。

首先关于rs.next();

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

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

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

打印出从查询返回的所有行
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:可变类型的价格应该是双倍的 此外,如果您的问题只是返回结果的顺序,您可以在查询中使用ORDER BY。它将允许根据表格的排序顺序(基于列的升序或降序)返回结果