我有一個用Java(netbeans/uncanaccess)編寫的SQL語句,它是一個相當簡單的選擇語句,包含一些來自我數據庫中一個表的IIF和SUM。當運行相同的查詢時,Java返回SQL的不同結果
當我在Access中運行SQL語句時,它返回正確的結果,但是當我嘗試在Java中運行它時,它返回的結果類似但不完全相同。
的Java代碼
public int getActualMHDetails(String strNumber, String strYear, String strPeriod){
String strSQLString = null;
System.out.println("Getting cost details for: " + strNumber);
try{
strSQLString = "SELECT tblExportCost.ProjDef, tblExportCost.Year,\n"
+ "Sum(IIf([Per]=1,[Val/ObjCur],0)) AS Jan, Sum(IIf([Per]=2,[Val/ObjCur],0)) AS Feb, Sum(IIf([Per]=3,[Val/ObjCur],0)) AS Mar,\n"
+ "Sum(IIf([Per]=4,[Val/ObjCur],0)) AS Apr, Sum(IIf([Per]=5,[Val/ObjCur],0)) AS May, Sum(IIf([Per]=6,[Val/ObjCur],0)) AS Jun,\n"
+ "Sum(IIf([Per]=7,[Val/ObjCur],0)) AS Jul, Sum(IIf([Per]=8,[Val/ObjCur],0)) AS Aug, Sum(IIf([Per]=9,[Val/ObjCur],0)) AS Sep,\n"
+ "Sum(IIf([Per]=10,[Val/ObjCur],0)) AS Oct, Sum(IIf([Per]=11,[Val/ObjCur],0)) AS Nov, Sum(IIf([Per]=12,[Val/ObjCur],0)) AS Dec\n"
+ "FROM tblExportCost\n"
+ "GROUP BY tblExportCost.ProjDef, tblExportCost.Year, tblExportCost.Year\n"
+ "HAVING (((tblExportCost.Year)= '" + strYear + "') AND ((tblExportCost.ProjDef)= 'T3415" + strNumber + "'))";
//SETTING PREPARED STATEMENT
PreparedStatement preStatement = con.prepareStatement(strSQLString, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = preStatement.executeQuery();
rs.next();
//IF CHECKS TO MAKE SURE RECORDS
if(rs.getRow()==0){
rs.close();
preStatement.close();
return 3;
}
strTest = rs.getString("Jan");
System.out.println("Test Value: " + strTest);
intAMHCJan = rs.getInt("Jan");
intAMHCFeb = rs.getInt("Feb");
intAMHCMar = rs.getInt("Mar");
intAMHCApr = rs.getInt("Apr");
intAMHCMay = rs.getInt("May");
intAMHCJun = rs.getInt("Jun");
intAMHCJul = rs.getInt("Jul");
intAMHCAug = rs.getInt("Aug");
intAMHCSep = rs.getInt("Sep");
intAMHCOct = rs.getInt("Oct");
intAMHCNov = rs.getInt("Nov");
intAMHCDec = rs.getInt("Dec");
//CLOSES CONNECTIONS
System.out.println("Database query successful; closing connections");
rs.close();
preStatement.close();
return 1;
}catch(Exception ex){
ex.printStackTrace();
strEXMessage=ex.getMessage();
return 2;
}
}
接入代碼
SELECT tblExportCost.ProjDef, tblExportCost.Year,
Sum(IIf([Per]=1,[Val/ObjCur],0)) AS Jan, Sum(IIf([Per]=2,[Val/ObjCur],0)) AS Feb, Sum(IIf([Per]=3,[Val/ObjCur],0)) AS Mar,
Sum(IIf([Per]=4,[Val/ObjCur],0)) AS Apr, Sum(IIf([Per]=5,[Val/ObjCur],0)) AS May, Sum(IIf([Per]=6,[Val/ObjCur],0)) AS Jun,
Sum(IIf([Per]=7,[Val/ObjCur],0)) AS Jul, Sum(IIf([Per]=8,[Val/ObjCur],0)) AS Aug, Sum(IIf([Per]=9,[Val/ObjCur],0)) AS Sep,
Sum(IIf([Per]=10,[Val/ObjCur],0)) AS Oct, Sum(IIf([Per]=11,[Val/ObjCur],0)) AS Nov, Sum(IIf([Per]=12,[Val/ObjCur],0)) AS Dec
FROM tblExportCost
GROUP BY tblExportCost.ProjDef, tblExportCost.Year, tblExportCost.Year
HAVING (((tblExportCost.Year)= 2016) AND ((tblExportCost.ProjDef)= 'T34151234'))
我甚至試圖挽救Access查詢和簡單的使用
strSQLString = "SELECT * FROM qryTestJava";
但這也返回同樣的結合直接結果。
結果
SQL
ProjDef Year Jan Feb Mar Apr May
T34151234 2016 22358.1 18742.9 3443.33000000001 10251.03 12706.78
的Java
ProjDef Year Jan Feb Mar Apr May
T34151234 2016 22,329 18,714 3,420 10,226 12,684
我做了一點挖掘,發現與精磨和ucanaccess Here類似的問題,但據報道,這在早期版本中修復。
我ucanaccess的當前版本是2.0.9.3
你能嘗試使用最新的版本UCanAccess的n(現在是3.0.5)呢? –
另外,'3443.33000000001'看起來像一個浮點值。您可以使用Access在設計視圖中打開[tblExportCost]並確認[Val]和[ObjCur]的列類型? (Single?Double?Currency?...?) –
可能需要用WHERE子句替換HAVING? HAVING主要是當你用它來限制函數的時候,但是SQL試圖限制一些字段。此外,不需要在同一個字段上進行兩次組合。 – LukStorms