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 标签中? [关闭]