Java 选择在tableModel中仅返回一个数组值的SQL查询
我试图从数据库中的一个特定Java 选择在tableModel中仅返回一个数组值的SQL查询,java,tablemodel,Java,Tablemodel,我试图从数据库中的一个特定categories表中获取具有类似类别名称的商品的行,并且,对于每一行,我进行了第二次SQL查询,以从orders表中汇总过去一周内的订单数量。我希望将结果添加到表模型中,但只添加一行 private void analyticsTableQuery(String Category) { this.categorySelected = Category; categoryTitle.setText(Category); int ordered;
categories
表中获取具有类似类别名称的商品的行,并且,对于每一行,我进行了第二次SQL查询,以从orders表中汇总过去一周内的订单数量。我希望将结果添加到表模型中,但只添加一行
private void analyticsTableQuery(String Category) {
this.categorySelected = Category;
categoryTitle.setText(Category);
int ordered;
int initial;
String query2 = "SELECT * FROM stock INNER JOIN category ON stock.Category_id=category.id where category.Category_Name='"+Category+"'";
try {
con = DriverManager.getConnection("jdbc:mysql://194.5.156.94:3306/u843360242_tukule?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","u843360242_tukule","cocaine");
pst = con.prepareStatement(query2);
rs=pst.executeQuery();
DefaultTableModel tm=(DefaultTableModel)analyticsTable.getModel();
tm.setRowCount(0);
while(rs.next()){
int id = rs.getInt("stock.id");
int current = rs.getInt("stock.Quantity");
String name = rs.getString("stock.Name");
String price = rs.getString("stock.Price");
String query = "SELECT sum(Quantity) as 'sum' FROM `orders` WHERE Created_at >= DATE(CURRENT_DATE() -7)
and Stock_id ="+id;
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/u843360242_tukule
useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC","root","");
pst = con.prepareStatement(query);
rs=pst.executeQuery();
rs.next();
if(rs.getInt("sum") > 0)
{
ordered = rs.getInt("sum");
initial = current + ordered;
}
else{
ordered = 0;
initial = current + ordered;
}
Object o[]={
name,
price,
initial};
tm.addRow(o);
} catch (SQLException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
} catch (SQLException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
}
您正在对外部和内部结果使用resultsetrs
。
使用内部结果集重新初始化rs
,会影响外部循环条件。
即使循环进行时,rs
中仍有行,读取id、quantity、name
等列也会导致异常,因为新的结果集rs
中可能不存在这些列,您的连接、语句和结果集(con
、pst
和rs
)都是无效的在while(rs.next())
循环中“重写”。这是故意的吗?是的。只要它在一个单独的try块中,它就可以正常工作。我认为这只是一个轻微的逻辑问题,但我不知道在哪里,因为rs
正在重新初始化(“重写”)…..;)谢谢@Codeek。在第二次查询中重新初始化的resultSet变量对它产生了很大的影响。谢谢。@Mariwa,您可以随时向上投票并将其标记为答案,只需说:P