这是我的按钮行为之一。 我的问题是resultset.first();不会将光标返回到第一行。 这是我的代码
public void Menu3_next( JTextField jTextField1, JTextField jTextField2, JComboBox jComboBox1, JComboBox jComboBox2){
Connect();
try{
statement = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
resultset = statement.executeQuery("select * from Menu3");
resultset.first();
while(resultset.next()){
jTextField1.setText(String.format("%s", resultset.getString("idMenu3")));
jTextField2.setText(String.format("%s", resultset.getString("Name")));
}
String query1 = String.format("select * from Menu1");// where idMenu1 = '%s'",strBrand);
resultset = statement.executeQuery(query1);
resultset.first();
while(resultset.next()){
jComboBox1.addItem(String.format("%s", resultset.getString("Brand")));
}
String query2 = String.format("select * from Menu2");// where idMenu= '%s'",strPart);
resultset = statement.executeQuery(query2);
resultset.first();
while(resultset.next()){
jComboBox2.addItem(String.format("%s", resultset.getString("Part")));
}
}
catch(SQLException ex){
System.out.println(ex);
}
}
TIA伙计们。当我点击按钮时,它必须显示下一个,下一个和下一个,直到最后一行。但它没有。它只显示最后一行。
答案 0 :(得分:1)
while (resultset.next()) { ... }
成语要求光标在之前第一行。当你调用resultset.first()
时,光标移动到第一行,然后resultset.next()
将光标向前移动,有效地跳过第一行。
注释掉要修复的所有resultset.first()
语句,例如:
resultset = statement.executeQuery("select * from Menu3");
//resultset.first();
while (resultset.next()) {
jTextField1.setText(String.format("%s", resultset.getString("idMenu3")));
jTextField2.setText(String.format("%s", resultset.getString("Name")));
}
答案 1 :(得分:0)
我没有彻底阅读这个问题,我的答案涵盖了我认为的另一个问题......正如其他答案中所指出的,您的问题是使用first()
和next()
但我相信我提出的观点仍然有效。
如果您不包含明确的ORDER BY
,则返回的集合中的行的顺序将是任意的。您的问题的解决方案最有可能在查询中指定顺序:
SELECT * FROM Menu3 ORDER BY ...
此外,使用select *
被视为不良做法,请参阅Bad habits to kick : using SELECT * / omitting the column list了解原因(同时Why is SELECT * considered harmful)。
答案 2 :(得分:0)
此处无需拨打first()
。执行查询后,ResultSet
位于之前第一行。随后的调用next()
将向前移动,直到没有更多行。
您当前的代码包含以下步骤:
ResultSet
(位于之前第一行)first()
(位于第一行)next()
(位于第二行,第三行等)
通过致电first()
并随后致电next()
,您跳过第一行。
您似乎认为ResultSet
在整个方法中是同一个对象:事实并非如此,每次调用executeQuery
都会产生 new {{ 1}}。关于正确关闭资源的问题,您应该开始使用try-with-resources
和JDBC资源,以确保完成后ResultSet
,ResultSet
和Statement
正确关闭
关于您的第二个问题:您使用Connection
,setText
替换该字段的全部内容。所以当然它只会显示最后一行。
PS在stackoverflow上你应该坚持每个问题一个问题。