Java从数据库中检索下一个类似项
我有以下代码:Java从数据库中检索下一个类似项,java,swing,jdbc,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 Pr
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按钮时,它将显示第一个结果。现在我想要的是,当我单击next时,我想要具有指定功能的第二个产品,以及第三个产品。
有没有办法做到这一点?请帮帮我。因为这是我大学项目的最后一项任务,所以我真的很坚持。
我希望我已经把每件事都解释清楚了。Thanx你的问题不是很清楚。但我将试着从我的理解中回答 首先是关于rs.next(); 此光标是指向结果集中一行数据的指针。最初,光标位于第一行之前。方法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值不正确,并且没有正确地指向它应该指向的位置
注:可变类型的价格应为双倍
另外,若您的问题只是关于返回结果的顺序,那个么您可以在查询中使用orderby。它将允许根据表格的排序顺序(基于列的升序或降序)返回结果请使用编辑功能格式化代码。已编辑…现在我可以获得解决方案吗?这是不可读的,除了代码中有错误之外<代码>oracle.jdbc.driver.Orac。leDriver(有很多空格)或
selectitem
(而不是selectitem
)将引发异常。请正确使用代码并删除不必要的换行符。@uoo我的代码工作得很好。。只是我在这里输入了它的一部分,所以对你来说可能会出现一些错误。@raj…thanx谢谢你的帮助…从你所说的我得到,如果我得到5行作为Ans,它将首先打印第一行的数据…然后它将打印第二行的数据,即使数据不是我想要的??我的意思是,如果您的数据库表有10个产品(5个levis,5个pepe),并且您的查询是product==levis,那么将返回5行,所有这些都是levis。rs将指向。用levis.Thanx a lot@raj开始5行..这确实解决了我的问题..:)一如既往..堆栈溢出,如果我的答案对您有帮助,请单击“接受答案”或“向上投票”。总是乐于助人:-)对不起,拉杰,我没有15次重复……但再次感谢你的帮助。。。