2014-01-22 177 views
0

我有一個使用HSQLDB的JAVA應用程序。有一個名爲「標記」的表格,其中包含一列稱爲「標記」的整數。如果我使用HSQLDB DatabaseManager運行以下查詢:SELECT AVG(CAST(標記爲FLOAT)),SUM(mark)FROM marks WHERE sid = 5 AND suid = 8 DBM返回正確的值: 1.5和3;對於標記1和2.準備語句返回錯誤值

如果我使用下面的JAVA代碼用相同的查詢讀出這些數據,java總是打印出2.對於平均值和總和。我不知道我在做什麼錯誤。也許你可以幫助我。

 double avg = 0; 
    PreparedStatement stmt = dbcn.prepareStatement("SELECT AVG(CAST(mark as FLOAT)), SUM(mark) FROM marks WHERE sid=? AND suid=?"); 
    stmt.setInt(1, 5); 
    stmt.setInt(2, 8); 
    ResultSet gARS = stmt.executeQuery(); 
    while(gARS.next()){ 
     avg = gARS.getDouble(1); 
     System.out.println(gARS.getInt(2)); 
    } 
    return avg; 

回答

1

System.out應先打印SUM:3。 然後該方法返回avg,1.5。看起來平均值打印了四捨五入。

也許你有這樣的:

double avg = callToDB(...); 
System.out.printf("%10.0f", avg); // ERROR .0 should be at least .1 

所以檢查格式字符串。如果它被舍入,它可能是一個int cast。

+0

感謝您的快速回答。我嘗試了你的建議,但仍然圓滿。我用2×標記1和1×標記2現在它說1。:/ –

+0

啊,我想顯示可能的錯誤,一個小數點後0格式導致四捨五入。就像現在發生的1.333一樣。 –

+0

好吧,就是這樣。非常感謝你 –