Java从数据库中检索下一个类似项目[关闭]

Posted

技术标签:

【中文标题】Java从数据库中检索下一个类似项目[关闭]【英文标题】:Java retrieve next similar item from database [closed] 【发布时间】:2015-04-27 10:40:22 【问题描述】:

我有以下代码:

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

【问题讨论】:

请使用编辑功能格式化您的代码。 已编辑...现在我能得到一个解决方案吗? 这是不可读的,除了代码中有错误。 oracle.jdbc.driver.Orac. leDriver(有很多空格)或selectitem(而不是select item)会抛出异常。还请正确地编写代码并删除不必要的换行符。 @Uooo 我的代码运行良好。只是我在这里输入了其中的一部分,所以对你来说可能有些错误。 【参考方案1】:

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

首先关于 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。它将允许根据表的排序顺序(基于列的升序或降序)返回结果

【讨论】:

@raj...感谢您的帮助...从您所说的我知道,如果我得到 5 行作为 Ans,它将首先打印第一行的数据...然后它将打印第二行的数据,即使数据不是我想要的?? 我的意思是,如果您的数据库表有 10 个产品(5 levis,5 pepe)并且您的查询是 product == levis,那么将返回 5 行,所有这些都是 levis。而rs会指向。以 levis 开头的 5 行。 非常感谢@raj ..这确实解决了我的问题..:) 一如既往..堆栈溢出,它是专家摇滚 如果我的回答对你有帮助,请点击接受或点赞。总是乐于提供帮助:-) 对不起 raj,我没有 15 次代表...但是再次感谢您的帮助...

以上是关于Java从数据库中检索下一个类似项目[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在不使用关系数据库的情况下在 Java 中存储和检索对象的简单方法? [关闭]

如何使用 java servlet 从 mysql 数据库中检索图像并将其显示在 HTML img 标签中? [关闭]

Jquery 数据库结果为写法? [关闭]

使用swift 3如何从firebase中检索另一个数据中的数据[关闭]

如何从java中的mysql表中检索数组中的值? [关闭]

从 Firebase 检索第二个项目时出错