|

楼主 |
发表于 2017-3-28 15:20:23
|
显示全部楼层
本帖最后由 qweasdzxc 于 2017-3-28 15:42 编辑
报错原因是group by 和limit
我现在修改了一下,代码向下面:
private static final String TABLE_LIBRARY = "SAM_LIBRARY";
private static final String TABLE_ASSET = "SAM_ASSET";
public static Table querySAM_AssetTree(String concept,String select,String from,
String aggregate,String dataModel,String fnModel,String condition,
List range,Boolean distinct,String idColumn,String filter,Integer limit,
Integer offset,String columns,String orderBy,String aggregateColumns,
Map variables){
int level = (Integer) variables.get("level");
String parent = (variables.get("parent")+"");
// 当查询资产的时候,需要得到数据库中真正的fID。
if (level > 2) {
parent = parent.split("-")[1];
}
String sql = null, sqlWhere = null, showTable = null;
System.out.println("parent:"+parent);
System.out.println("11111111");
// 根据级别判断,来决定访问那个数据库,返回值中返回自定义列fLevel和fIsLeaves
switch (level) {
case 1:
System.out.println("2222222222");
sql = "select null as fParentID,1 as fLevel,'false' as fIsLeaves,fID,fName from "
+ TABLE_LIBRARY+" GROUP BY fID limit "+offset+","+limit;
sqlWhere = "";
showTable = TABLE_LIBRARY;
System.out.println("3333333333333333");
break;
case 2:
sql = "select fID as fParentID,2 as fLevel,'false' as fIsLeaves,"
+"concat_ws('-','"+parent+"',CONVERT(fID,char)) as fID,fName from "
+ TABLE_LIBRARY+" where fID = "+parent+" GROUP BY fID limit "+offset+","+limit;
sqlWhere = " where fID = "+parent;
showTable = TABLE_LIBRARY;
break;
case 3:
sql = "select fID as fParentID,3 as fLevel,'true' as fIsLeaves,"
+ "concat_ws('-','"+parent+"',CONVERT(fID,char)) as fID,fName from "
+ TABLE_ASSET+" where fID = "+parent+" GROUP BY fID limit "+offset+","+limit;
sqlWhere = " where fID = "+parent+" and fApprovedState='已发布'";
showTable = TABLE_ASSET;
break;
}
System.out.println("sql:"+sql);
HashMap<String,String> sqlMap = new HashMap<String,String>();
System.out.println("444444444444444444");
sqlMap.put(DatabaseProduct.ORACLE.toString(),sql);
System.out.println("555555555555555");
Table table = SQL.select(sqlMap, null, "/SAM/assetManage/data");
System.out.println("66666666666666666666666");
table.getProperties().put(Table.PROP_NAME_ROWID, "fID");
// 设置table的总行数,bizData分页需要
String countSql = "select count(*) from "+showTable+" "+sqlWhere;
HashMap<String,String> countSqlMap = new HashMap<String,String>();
countSqlMap.put(DatabaseProduct.ORACLE.toString(),countSql);
Table countTable = SQL.select(countSqlMap, null, "/SAM/assetManage/data");
Iterator<Row> rows = countTable.iterator();
Row row = rows.next();
int count = row.getInt(0);
table.getProperties().put(Table.PROP_DB_COUNT, count);
return table;
}
控制台输出:- parent:null
- 11111111
- 2222222222
- 3333333333333333
- sql:select null as fParentID,1 as fLevel,'false' as fIsLeaves,fID,fName from SAM_LIBRARY GROUP BY fID limit 0,-1
- 444444444444444444
- ORACLE
- 555555555555555
- 2017-03-28 15:37:03 excute stream action, params:{"accept":"application/json","action":"querySAM_AssetTreeAction","actionFlag":"__action_0__","activity":"mainActivity","contentType":"json","executeContext":"","executor":"","parameters":{"columns":"SAM_AssetTree,fID,fIsLeaves,fLevel,fName,fParentID,version","filter":"(SAM_AssetTree.fParentID IS NULL)","limit":-1,"offset":0,"variables":{"level":1}},"process":"/SAM/assetManage/process/newPortal/newPortalProcess","translateParameter":{"cellnameByRelation":false,"dataType":"row-tree","includeState":true,"rowsConfig":{"concept":"SAM_AssetTree","sequence":"SAM_AssetTree,fID,fIsLeaves,fLevel,fName,fParentID,version"},"transformIdcolumn":true,"useNamespace":true}}
- java.lang.reflect.InvocationTargetException
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:497)
- at com.justep.system.action.Engine.invokeActions(Native Method)
- at com.justep.system.action.Engine.invokeActions(Unknown Source)
- at com.justep.business.server.BusinessServer.doAction(Unknown Source)
- at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
- at com.justep.business.server.BusinessServer.excute(Unknown Source)
- at com.justep.business.server.BusinessServer.excute(Unknown Source)
- at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
- at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
- at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
- at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
- at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
- at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
- at java.lang.Thread.run(Thread.java:745)
- Caused by: com.justep.exception.BusinessException: 编码: JUSTEP150039; 提示: 执行sql: select null as fParentID,1 as fLevel,'false' as fIsLeaves,fID,fName from SAM_LIBRARY GROUP BY fID limit 0,-1, binds: []出错
- at com.justep.exception.BusinessException.create(Unknown Source)
- at com.justep.system.data.SQL.select(Unknown Source)
- at com.justep.system.data.SQL.select(Unknown Source)
- at AssetManage.querySAM_AssetTree(AssetManage.java:272)
- ... 27 more
- Caused by: java.sql.SQLException: ORA-00933: SQL 命令未正确结束
- at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
- at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
- at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
- at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
- at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:213)
- at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:796)
- at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1031)
- at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:836)
- at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1124)
- at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
- at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)
- at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
- at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
- ... 30 more
复制代码
|
|