------------------------------ 输入的命令 ------------------------------
select a.F_VC_PINGM,a.F_VC_LEIB,a.F_VC_DANW,a.F_IT_SHUL,F_VC_MINGC,F_VC_TYPE,F_VC_DATE,ROW_NUMBER() OVER(order by a.F_IT_ID)AS RN from SB_YONGHSB a join  SB_YONGHSBBG b on a.F_IT_FANGJID = b.F_IT_FANGJID join TS_LOUCJG c on b.F_IT_FANGJID = c.F_IT_ID AS a1 WHERE a1.rn BETWEEN 1 AND 20;
------------------------------------------------------------------------------
select a.F_VC_PINGM,a.F_VC_LEIB,a.F_VC_DANW,a.F_IT_SHUL,F_VC_MINGC,F_VC_TYPE,F_VC_DATE,ROW_NUMBER() OVER(order by a.F_IT_ID)AS RN from SB_YONGHSB a join  SB_YONGHSBBG b on a.F_IT_FANGJID = b.F_IT_FANGJID join TS_LOUCJG c on b.F_IT_FANGJID = c.F_IT_ID AS a1 WHERE a1.rn BETWEEN 1 AND 20
SQL0104N  在 "n b.F_IT_FANGJID = c" 之后发现意外的标记
"."。期望的标记可能包括:","。  SQLSTATE=42601SQL0104N  在 "n b.F_IT_FANGJID = c" 之后发现意外的标记 "."。期望的标记可能包括:",                                              "。解释: 在文本 "<文本>" 后面的指定标记处检测到 SQL
语句中的语法错误。"<文本>" 字段指示无效标记前面的 SQL 语句中的 20
个字符。 作为对程序员的帮助,在 SQLCA 的 SQLERRM
字段中,提供了有效标记的部分列表作为
"<标记列表>"。此列表假设语句到该位置为止是正确的。 不能处理该语句。 用户响应: 在指定的标记区域内检查并更正语句。  sqlcode :  -104  sqlstate :  42601 这个是DB2的三表联查加分页。
SQL语句是从控制台打印出来的。
Java代码如下:
public List findAllHistory(int curPages){
Connection conn = null;
ResultSet rs = null;
Statement stmt = null;
conn = DBConnection.getConnection();
List list = new ArrayList();
String sql = "select a.F_VC_PINGM,a.F_VC_LEIB,a.F_VC_DANW,a.F_IT_SHUL,F_VC_MINGC,F_VC_TYPE,F_VC_DATE,ROW_NUMBER() OVER(order by a.F_IT_ID)AS RN" 
+ " from SB_YONGHSB a" 
+ " join  SB_YONGHSBBG b on a.F_IT_FANGJID = b.F_IT_FANGJID" 
+ " join TS_LOUCJG c on b.F_IT_FANGJID = c.F_IT_ID";
String querySql="";

this.setCounts(
pageBean.getAvailableCount("select count(*) from SB_YONGHSB a" 
+ " join  SB_YONGHSBBG b on a.F_IT_FANGJID = b.F_IT_FANGJID" 
+ " join TS_LOUCJG c on b.F_IT_FANGJID = c.F_IT_ID"));

if (!startDate.equalsIgnoreCase("") && !endDate.equalsIgnoreCase("")) {
if(querySql.equalsIgnoreCase(""))
querySql =" WHERE (F_VC_DATE >='"+ startDate + "' AND F_VC_DATE <='"+ endDate + "')";
else
querySql =querySql+" and (F_VC_DATE >='"+ startDate + "' AND F_VC_DATE <='"+ endDate + "')"; }

if (!rooms.equalsIgnoreCase("")) {
if(querySql.equalsIgnoreCase(""))
querySql =" where F_VC_MINGC like '%" + rooms + "%'";
else
querySql =querySql+" and F_VC_MINGC like '%" + rooms + "%'";

}

this.setCounts(
pageBean.getAvailableCount("select count(*) from SB_YONGHSB a" 
+ " join  SB_YONGHSBBG b on a.F_IT_FANGJID = b.F_IT_FANGJID" 
+ " join TS_LOUCJG c on b.F_IT_FANGJID = c.F_IT_ID"+querySql));
sql =
sql+querySql
+ " AS a1 WHERE a1.rn BETWEEN "
+ ((curPages - 1) * pageRows + 1)
+ " AND "
+ curPages * pageRows;
System.out.println(sql);

try{
//执行SQL语句
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs != null && rs.next()){
HistoryObj obj = new HistoryObj();
obj.setName(rs.getString(1));
obj.setType(rs.getString(2));
obj.setUnit(rs.getString(3));
obj.setQuantity(rs.getString(4));
obj.setRoom(rs.getString(5));
obj.setOperating(rs.getString(6));
obj.setDate(rs.getString(7));
list.add(obj);
}
}
catch (SQLException e){
System.out.println("com.swgl.sheshi:getArtType:查询数据出错:" + e.toString());
}
finally{
db.conClose();
}
System.out.println(list.size()+"!!!");
return list;
}