public Script(String sql, List pars) {
this.original = sql;
this.sql = sql;
this.originalParams = pars;
this.params = new ArrayList();
Hashtable temp = new Hashtable(); String sql;
List pars;
 Regex r = new Regex(@"[{](?<name>[^}]*)[}]"); 
 MatchCollection ms =r.Matches(sql); 
 foreach (Match m in ms) { 
 String key = m.Groups["name"].Value; 
 if (temp[key] == null) { 
 temp[key.ToUpper()]= 1; 
 params.Add("{" + key + "}"); 
 sql = sql.Replace("{" + key + "}","@" + (params.Count + originalParams.Count)); 
 }
 } 
 Regex regex = newRegex(@"(\W)[Rr][Ee][Tt][Uu][Rr][Nn](\W)"); 
 sql = regex.Replace(sql,"$1SELECT$2"); 
 regex = new Regex(@"^[Rr][Ee][Tt][Uu][Rr][Nn](\W)");
  sql = regex.Replace(sql, "SELECT$1"); }如何转化成java代码,谢谢!!!

解决方案 »

  1.   

    String sql;
    List pars;
    中间这两句是干什么呀,在c#中能编辑通过吗?全局变量已经sql并且参数sql你再定义个sql?
      

  2.   


    public Script(String sql,List pars)
    {
    this.original = sql;
        this.sql = sql;
        this.originalParams = pars;
        this.params = new ArrayList();
        Map<Integer,String> hashMap=new HashMap<Integer,String>();
        String regex="("[{](?<name>[^}]*)[}]");//我不明白你的正则想干什么
        Pattern pattern=Pattern.compile(regex);
        Matcher matcher=pattern.matcher(s);
        List<String> list=new ArrayList<String>();
        while(matcher.find())
         {
             list.add(matcher.group());
            
          }
          for(String key:list)
          {
             if(!hashMap.containsKey(key))
             {
               hashMap.put(key.toUpperCase(),1);
               params.add("{" + key + "}");
               sql=sql.replace("{" + key + "}","@" + (params.size() + originalParams.size())); 
             }
          }
        
    }
      

  3.   

    完整代码如下:我要的就是理解public Script(String sql, List pars) 是怎么回事,谢谢各位大虾 package com.kayang.application;import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;
    import com.kayang.db.DataView;
    import com.kayang.db.Database;public class Script implements Cloneable {
    public static String makeWithSelect(String sql) {
    /*
     * if (!startWithSelect(sql)) { sql = "select " + sql; }
     */
    return sql;
    } private List params;
    private List originalParams;
    private String sql;
    private String original; public Script(String sql) {
    this(sql, new ArrayList());
    } // / <summary>
    // / pars可传入部分参数,sql可包含@1、@2等
    // / </summary>
    public Script(String sql, List pars) {
    this.original = sql;
    this.sql = sql;
    this.originalParams = pars;
    this.params = new ArrayList();
    // Save parsed Paramters, avoid process
    Hashtable temp = new Hashtable();
    // twice /*
     * Regex r = new Regex(@"[{](?<name>[^}]*)[}]"); MatchCollection ms =
     * r.Matches(sql); foreach (Match m in ms) { String key =
     * m.Groups["name"].Value; if (temp[key] == null) { temp[key.ToUpper()]
     * = 1; params.Add("{" + key + "}"); sql = sql.Replace("{" + key + "}",
     * "@" + (params.Count + originalParams.Count)); } } Regex regex = new
     * Regex(@"(\W)[Rr][Ee][Tt][Uu][Rr][Nn](\W)"); sql = regex.Replace(sql,
     * "$1SELECT$2"); regex = new Regex(@"^[Rr][Ee][Tt][Uu][Rr][Nn](\W)");
     * sql = regex.Replace(sql, "SELECT$1");
     */
    } public String getOriginalStr() {
    return original;
    } protected Script() {
    } public static Script scriptForString(String p) {
    if (p == null || p == "") {
    return null;
    } else {
    return new Script(p);
    }
    } public Object getValue(Database db, IDataContext ctx) throws Exception {
    sql = makeWithSelect(sql);
    List param = new ArrayList(originalParams);
    for (int i = 0; i < params.size(); i++) {
    // param.Add(ctx.GetValue((String)params[i]));
    param.add(ctx.getValue((String) params.get(i)));
    }
    // try
    // {
    return db.queryScalar(sql, param);
    // }
    // catch (System.Data.SqlClient.SqlException ex)
    // {
    // if (ex.Number == 8134)//遇到以零作除数错误
    // {
    // return 0;
    // }
    // else
    // {
    // throw ex;
    // }
    // }
    } public DataView getData(Database db, IDataContext ctx) throws Exception {
    List param = new ArrayList(originalParams);
    for (int i = 0; i < params.size(); i++) {
    param.add(ctx.getValue((String) params.get(i)));
    }
    return (DataView) db.query(sql, param);
    } public int execute(Database db, IDataContext ctx) throws Exception {
    List param = new ArrayList(originalParams);
    for (int i = 0; i < params.size(); i++) {
    param.add(ctx.getValue((String) params.get(i)));
    } // return db.execute(sql, param);
    db.execute(sql, param);
    return 0;
    } public List getRelyColumns() {
    List p = new ArrayList();
    for (int i = 0; i < params.size(); i++) {
    String x = (String) params.get(i);
    if (x.indexOf('.') < 0 && x.indexOf('[') > 0) {
    p.add(x.substring(2, x.length() - 4));
    }
    }
    return p;
    } public List getRelyParameters() {
    String[] systemParamters = { "MYEID", "MYDEPID", "MYCOMPID", "MYJOBID" };
    List p = new ArrayList();
    for (int i = 0; i < params.size(); i++) {
    String x = (String) params.get(i);
    if (x.indexOf('.') < 0 && x.indexOf('[') < 0) {
    x = x.substring(1, x.length() - 2);
    boolean s = true;
    for (int j = 0; j < systemParamters.length; j++) {
    if (systemParamters[j] == x) {
    s = false;
    break;
    }
    }
    if (s) {
    p.add(x);
    }
    }
    }
    return p;
    } public Object clone() {
    Script script = new Script();
    script.sql = sql;
    script.original = original;
    script.originalParams = new ArrayList(originalParams);
    script.params = new ArrayList(params);
    return script;
    } /*
     * public String ReplacedString(IDataContext ctx) { String ret = sql; for
     * (int i = 0; i < params.Count; i++) { ret = ret.Replace("@" +
     * (originalParams.Count + i + 1), ctx .GetCaption((String) params[i])); }
     * return ret; }
     */ public String replacedString(IDataContext ctx) {
    String ret = sql;
    for (int i = 0; i < params.size(); i++) {
    ret = ret.replaceAll("@" + (originalParams.size() + i + 1), ctx
    .getCaption((String) params.get(i)));
    }
    return ret;
    }}
      

  4.   

    不好意思写反了
    Map<Integer,String> hashMap=new HashMap<Integer,String>();
    应该是
    Map<String,Integer> hashMap=new HashMap<String,Integer>();
      

  5.   

    首先这是这个类的重载构造函数。构造函数中主要是为了给params添加通过正则匹配完的key和返回一个通过正则规则匹配后的sql。
      

  6.   

    new Regex="("[{](?<name>[^}]*)[}]");//我不明白正则想干什么
    在java中用什么