2017-10-13 104 views
0

in Java。有没有人有关如何从这个查询中检索数据的想法?我能为傻笑查询做到这一点,但我觉得这种情况很混乱:检索结果集中的结果mysql java

SELECT (SELECT sum(r2.a) FROM R r2 WHERE year(r2.p) = 
'2015' and month(r2.p) < month(r1.p)) AS Previous, 
      (SELECT sum(r3.a) FROM R r3 WHERE year(r3.p) 
= '2015' and month(r3.p) > month(r1.p)) AS Next, 
      (SELECT sum(r4.a) FROM R r4 WHERE year(r4.p) 
= '2015' and month(r4.p) = month(r1.p)) AS Curr 
FROM R r1 
    WHERE YEAR(r1.pickupdate) = '2015'; 

回答

1

使用声明别名:AS Curr

ResultSet rs = preparedStatement.executeQuery(); 

while (rs.next()) { 
     Integer curr = rs.getInt("Curr"); 
     // Do something here 
} 
+0

谢谢,你救了我! –

+0

很高兴听到:)请标记正确的答案让其他人重复使用。 –

1

你的语句返回布尔别名上,NextM,姜黄素。 你可以把它们当作整数0或1,就像在其他答案中一样,但它们仍然是布尔值和imo,这就是它们应该如何使用的。

还要考虑使用PreparedStatement的参数避免SQL注入。

Connection con = null; // ... assuming you already have your connection 

String sql = "SELECT ... WHERE YEAR(r1.pickupdate) = ?"; 

PreparedStatement pstmt = null; 
try 
{ 
    pstmt = con.prepareStatement(sql); 

    int year = 2015; 
    pstmt.setInt(1, year); 

    ResultSet rs = pstmt.executeQuery(); 
    while (rs.next()) 
    { 

     boolean previous = rs.getBoolean("Previous"); 
     boolean nextM = rs.getBoolean("NextM"); 
     boolean curr = rs.getBoolean("Curr"); 

     // do something here with each record 
    } 
} finally 
{ 
    // release Statement resources immediately after execution 
    try 
    { 
     pstmt.close(); 
    } catch (Exception e) 
    { 
    } 
} 
// use the same try finally approach for the connection