快逸报表获取填报更新属性中的sql
◆ 背景说明
填报监听类中,怎么获取填报更新的sql。获取到sql后,可以根据需求,做一些比如插入一条数据,更新一条数据等操作。
我们看下面一个例子。
◆ 应用举例
监听类部分代码:
import java.sql.Connection;
import java.sql.Statement;
import com.runqian.base4.util.SQLParser;
import com.runqian.report4.usermodel.input.AbstractInputListener;
import com.runqian.report4.usermodel.input.InputSQL;
public class TBUserProcess3 extends AbstractInputListener{
public void afterSave(){
System.out.println(“数据填报处理程序开始执行…….”);
String sk,sqlstr,where,str1;
String[] sks;
int j=0;
InputSQL[] sql = getInputSql();
System.out.println(“戴_____________sql:”+sql);
Connection con = null;
Statement stmt = null;
try{
con=context.getConnectionFactory(context.getDefDataSourceName()).getConnection();
System.out.println(“填报处理:获得的数据库连接“);
stmt = con.createStatement();
for(int i=0;i<sql.length;i++){
//开始处理Where子句
where=” 1=1 “;
sk=SQLParser.getClause(sql[i].getSql(),SQLParser.KEY_WHERE);//取得主键的字段
//取出where后面的条件
System.out.println(“戴_______________ sk:”+sk);
sks=sk.split(“and”);
for ( j = 0; j < sks.length; j++) {
where=where + ” and “+sks[j];
System.out.println(“戴_____________ where:”+where);
System.out.println(“戴______________sks["+j+"]:“+sks[j]);
}
//开始处理需要更新的字段信息,sks[j]中为需要更新的字段
sk=SQLParser.getClause(sql[i].getSql(),SQLParser.KEY_SET);//取得更新字段
System.out.println(“戴______________更新的字段:“+sk);
sks=sk.split(“,”);
for ( j = 0; j < sks.length; j++) {
//if (!sks[j].substring(0,sks[j].indexOf(“=”)-1).trim().toUpperCase().equals(“UPDATEDATE”))
sks[j]=sks[j].substring(0,sks[j].indexOf(“=”)-1).trim();
System.out.println(“戴______________sks["+j+"]:“+sks[j]);
}
//开始整合SQL语句,将相应的值插入sql的字段中就可以拼成一个sql语句,此处没有插入值。
sqlstr=”update “+SQLParser.getClause(sql[i].getSql(),SQLParser.KEY_UPDATE)+” set “;
sqlstr=sqlstr+sk;
sqlstr=sqlstr+ ” where “+ where;
System.out.println(“sqlstr——1:”+sqlstr);
str1=sqlstr;
System.out.println(“获取的str1—————:“+str1);
stmt.executeUpdate(str1);
con.commit();
}
}catch(Exception e){
System.out.println(e.getMessage());
}finally {
try {
if ( con == null ) System.out.println(“没有获得数据库连接!!!“);
if ( stmt != null ) stmt.close();
if ( con != null ) con.close();
System.out.println(“数据填报处理程序执行结束…….”);
}catch( Exception e ) {
System.out.println(e.getMessage());
}
}
}
}