⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oqlparser.java

📁 一个Java持久层类库
💻 JAVA
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package ActiveObject.core;import java.util.Map;/** * * @author tanjiazhang */public class OQLParser {    static final String alias = "abcdefghijklmnopqrstuvwxyz";    public static final String MatchSymbol = "%";    public static final String LikeKeyword = "like";    public static final String PlaceSymbol = "?";        /**     * 将条件语句中的like语法转换为SQL支持的like语法     * @param sql     * @param args     * @return     */    public static String parseLikeSyntax(StringBuffer sql, Object[] args)    {        return parseLikeSyntax(sql.toString(), args);    }    /**     * 将条件语句中的like语法转换为SQL支持的like语法     * @param sql     * @param args     * @return     */    public static String parseLikeSyntax(String sql, Object[] args)    {//System.err.println(sql);        int index = sql.indexOf(OQLParser.LikeKeyword);        for(int i=0; index>0 && index<sql.length() ;)        {            int questIndex = sql.indexOf(OQLParser.PlaceSymbol, index+4);            int nextIndex = sql.indexOf(OQLParser.LikeKeyword, index+4);            if(nextIndex < 0)                nextIndex = sql.length();//System.err.println((index+4)+" "+ questIndex +" "+nextIndex);            if(questIndex < 0 || questIndex > nextIndex)            {                index = nextIndex;                continue;            }                        boolean preLike = false;            boolean tailLike = false;            if(sql.substring(index+4, questIndex).contains(OQLParser.MatchSymbol))                preLike = true;            if(sql.substring(questIndex, nextIndex).contains(OQLParser.MatchSymbol))                tailLike = true;            if(preLike)                args[i] = "%"+args[i];            if(tailLike)                args[i] = args[i]+"%";                        index = nextIndex;            i++;        }        sql = OQLParser.replaceLikeKeyword(sql);        return sql.replaceAll(OQLParser.MatchSymbol, "");    }        /**     * 将&符号转换为SQL支持的and关键字     * @param sql     * @return     */    private static final String replaceLikeKeyword(String sql)    {        return sql.replace("&", " and ");    }    public static String replaceWithAlias(String condition, Map<String, String> aliasMap)    {        for(String className : aliasMap.keySet())        {            condition = condition.replaceAll(className, aliasMap.get(className));        }        return condition;    }        public static final boolean isContentEmpty(String condition)    {        if(condition == null)            return false;        for(int i=0;i<condition.length();i++)        {            if(condition.charAt(i) != ' ')                return false;        }        return true;    }    /**     * 获取sql语句中参数占位符的个数     * @param sql     * @return     */    public static final int getPlaceSymbolCount(String sql)    {        if(sql == null)            return 0;        int count = 0;        int index = sql.indexOf(OQLParser.PlaceSymbol);        while(index > -1)        {            count++;            index = sql.indexOf(OQLParser.PlaceSymbol, index+1);        }        return count;    }    public static void main(String... args)    {        System.out.println(getPlaceSymbolCount("a???"));    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -