所以,我正在研究Java(JDBC)上的本地数据库。当我按下一个按钮时,我应该得到一个" SELECT"查询。到目前为止一直很好,但由于某些原因,我的初学者大脑不理解我继续从查询中获得只有一行行。我甚至在" DB浏览器上运行SQLite"并返回正确的结果(1+行)。 所以这是我用来获取查询结果的方法:
public ResultSet returnBill(int no) throws SQLException{
String sql = "SELECT * FROM billList WHERE no = " + no + " ;";
ResultSet thisSet = stmt.executeQuery(sql); // stmt is a 'Statement' type variable
return thisSet;
}
该方法不会崩溃,但它只会返回一个返回超过2的查询的第一行( while(thisSet.next()) RUNS ONCE)。我运行其他" SELECT"对程序的查询应该返回多行并且它们都工作正常,这不是无法启动/关闭连接等问题。
以下是使用的方法:
int number = table.getModel().getValueAt(rows, 0);
ResultSet thisSet = db.returnBill(number);
while (thisSet.next()){
String name = thisSet.getString("name");
int quantity = thisSet.getInt("quantity");
// do something with the returned data
}
所以我从表中得到这个神奇的数字(当然我确定它不是0,-1等)并且我使用该数字运行查询。你可以想到由列组成的表的结构:
号码名字|数量|
其中'数字'非零。 我知道可能使用此方法在数据库上运行查询可能不安全或可能会发布安全威胁,但现在情况并非如此。我已经在这个项目上工作了很长时间,我经历过很多愚蠢的错误,我认为这只是其中之一。任何帮助都是令人满意的! :D
答案 0 :(得分:0)
所以是的,正如我所料,这是一个愚蠢的错误。 所以我之前发过了一个变量
resizeBackground()
打开数据库进行2次查询(SELECT查询和另一个表上的UPDATE查询,如图所示),然后在下面的代码结尾处关闭。
当我删除此UPDATE查询时,循环执行了正确的次数。所以看起来SQLite JDBC在某种程度上倾向于在相同的语句上运行SELECT和UPDATE查询(就我的超级大脑*大脑所感知的而言)。
所以我在一开始创建了2个连接,最后用 SELECT 中的一个连接关闭它们,另一个用于 UPDATE 查询:
Database db = new Database();
我不知道这是否是最好的方法,但它解决了我的问题,所以我离开它可能会有所帮助。任何建议都会受到欢迎:D