Procházet zdrojové kódy

为SQL数据集添加存储过程支持,SQL数据集中SQL以call关键字开头,引擎将识别为存储过程调用

master
jacky6024 před 6 roky
rodič
revize
e6852c2cd0
  1. 4
      ureport2-console/src/main/java/com/bstek/ureport/console/designer/DatasourceServletAction.java
  2. 2
      ureport2-core/src/main/java/com/bstek/ureport/definition/dataset/SqlDatasetDefinition.java
  3. 5
      ureport2-core/src/main/java/com/bstek/ureport/utils/ProcedureUtils.java

4
ureport2-console/src/main/java/com/bstek/ureport/console/designer/DatasourceServletAction.java

@ -175,7 +175,7 @@ public class DatasourceServletAction extends RenderPageServletAction {
conn=buildConnection(req);
Map<String, Object> map = buildParameters(parameters);
sql=parseSql(sql, map);
if(sql.trim().toLowerCase().startsWith("call ")){
if(ProcedureUtils.isProcedure(sql)){
List<Field> fieldsList = ProcedureUtils.procedureColumnsQuery(sql, map, conn);
fields.addAll(fieldsList);
}else{
@ -227,7 +227,7 @@ public class DatasourceServletAction extends RenderPageServletAction {
try{
conn=buildConnection(req);
List<Map<String,Object>> list=null;
if(sql.trim().toLowerCase().startsWith("call ")){
if(ProcedureUtils.isProcedure(sql)){
list=ProcedureUtils.procedureQuery(sql, map, conn);
}else{
DataSource dataSource=new SingleConnectionDataSource(conn,false);

2
ureport2-core/src/main/java/com/bstek/ureport/definition/dataset/SqlDatasetDefinition.java

@ -65,7 +65,7 @@ public class SqlDatasetDefinition implements DatasetDefinition {
}
Utils.logToConsole("RUNTIME SQL:"+sqlForUse);
Map<String, Object> pmap = buildParameters(parameterMap);
if(sqlForUse.trim().toLowerCase().startsWith("call ")){
if(ProcedureUtils.isProcedure(sqlForUse)){
List<Map<String,Object>> result = ProcedureUtils.procedureQuery(sqlForUse,pmap,conn);
return new Dataset(name,result);
}

5
ureport2-core/src/main/java/com/bstek/ureport/utils/ProcedureUtils.java

@ -36,6 +36,11 @@ import com.bstek.ureport.exception.ReportException;
* @since 2017年12月27日
*/
public class ProcedureUtils {
public static boolean isProcedure(String sql){
sql=sql.trim().toLowerCase();
return sql.startsWith("call ");
}
public static List<Field> procedureColumnsQuery(String sql,Map<String, Object> pmap,Connection conn){
CallableStatement cs=buildProcedureCallableStatement(sql, pmap, conn);
ResultSet rs=null;

Načítá se…
Zrušit
Uložit