📄 oqlparser.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 + -