【发布时间】:2011-09-04 18:36:15
【问题描述】:
我在将 sql 查询作为字符串插入 java 时遇到了一些问题。当我将文本直接粘贴到其中时,它不会将其保留为字符串(不知道为什么,因为其中没有双引号),所以我尝试逐行对其进行格式化,但随后出现 sql 异常(并且我知道查询有效) .谁能发现什么给我的问题?如果没有,有没有更好的方法可以插入 sql 代码?谢谢
public FratReport getFratReport() throws SQLException {
FratReport newfrat = new FratReport();
Statement stmt;
ResultSet results;
String myQuery;
myQuery = String.format("select m.nickname,"
+" case"
+" when stat_nrOfBookings/date_part('days', now()-stat_since)<0.035714 then 1"
+" when stat_nrOfBookings/date_part('days', now()-stat_since)<0.07142858 then 2"
+" when stat_nrOfBookings/date_part('days', now()-stat_since)<0.1785715 then 3"
+" when stat_nrOfBookings/date_part('days', now()-stat_since)<0.2857143 then 4"
+" else 5 end as freq,"
+" case"
+" when stat_sumPayments < 10000 then 1"
+" when stat_sumPayments < 100000 then 2"
+" when stat_sumPayments < 250000 then 3"
+" when stat_sumPayments < 500000 then 4"
+" else 5 end as am,"
+" case"
+" when count = null then 'weekday'"
+" when stat_nrOfBookings-count > count then 'weekday'"
+" else 'weekend' end as typ,"
+" case"
+" when max = null then 0"
+" when max<(now()-interval '4 weeks') then 1"
+" when max<(now()-interval '2 weeks') then 2"
+" when max<(now()-interval '1 week') then 3"
+" when max<(now()-interval '1 days') then 4"
+" else 5 end as rece"
+" from (member natural join memberstats) as m join"
+" (select rece.nickname, max, count from"
+" (select nickname , max(whenbooked) from member full join booking on member.memberNo = booking.madeBy group by member.nickname) as rece"
+" full join"
+" (select nickname, count from member full join (select nickname as nn, count(*) from (select nickname, to_char(whenbooked, 'D') from member left outer join booking on member.memberno = booking.madeBy) as days where to_char = '7' or to_char = '6' group by nickname) as c on member.nickname = c.nn) as daycount"
+" on rece.nickname = daycount.nickname)"
+" as n"
+" on m.nickname = n.nickname"
+" order by freq desc, rece desc, am desc, typ desc");
try {
stmt = conn.createStatement();
results = stmt.executeQuery(myQuery);
String newString;
while (results.next()) {
newString = results.getString("nickname") + " " +
Integer.toString(results.getInt("rec"))+ " " +
Integer.toString(results.getInt("am")) +" "+
results.getString("type");
newfrat.addLine(newString);
}
stmt.close();
results.close();
}
catch(SQLException e){System.out.println("yep");}
return newfrat;
}
【问题讨论】:
-
你可以在这里粘贴来自 sqlprofiler 的结束查询吗?
-
不幸的是,我正在使用 postgreSQL,有没有等效的?