发新话题
打印

用jsqlparser过滤数据集,使用sql 查询的语法

感谢这位朋友的信任,不过,有问题,还是在这里提,一则,加qq不方便,二则,便于其他朋友共同学习,sorry

TOP

BinaryOperator.java 可以从简表源码中得到,其作用是封装了 beanshell,beanshell是一个开源的脚本引擎,可以识别java语法,进行条件判断等运算。
使用方法是:
1. 将简表里的 bsh2.0.jar,拿出来,置于你的类路径中。
2. 将 源码中的 BinaryOperator.java 复制出来,放到你的项目源码中,即可.

源码可以从 http://www.jatools.com/jor下载


[ 本帖最后由 jennifer 于 2011-6-15 11:19 编辑 ]

TOP

我用这个代码测了一下,and表达式可以支持,完整代码见附件。
复制内容到剪贴板
代码:

    public static void main(String[] args) {
        try {
            // 准备数据集
            Object[][] data = {
                    { "崔永远", 18 },
                    { "王小鸭", 16 }
                };
            jatools.dataset.Column[] columns = new jatools.dataset.Column[2];
            columns[0] = new jatools.dataset.Column("姓名", String.class);
            columns[1] = new jatools.dataset.Column("年龄", Integer.class);
            RowMeta rowMeta = new RowMeta(columns);
            Statement stat = new CCJSqlParserManager().parse(new StringReader(
                        "select * from a where 姓名='崔永远' and 年龄=18"));
            Select select = (Select) stat;
            Expression where = ((PlainSelect) select.getSelectBody()).getWhere();
            Map<String, Integer> _columns = new HashMap<String, Integer>();
            for (int i = 0; i < rowMeta.getColumnCount(); i++) {
             _columns.put(rowMeta.getColumnName(i).toUpperCase(), i);
            }
            
            WhereExpressionVisitor visitor = new WhereExpressionVisitor(_columns, where);
            for (int i = 0; i < data.length; i++) {
                Object result = visitor.eval(data[i]);
                if (result instanceof Boolean && ((Boolean) result).booleanValue()) {
                    System.out.print("通过=====>");
                } else {
                    System.out.print("不通过=====>");
                }
                System.out.println(StringUtils.join(data[i], ","));
            }
        } catch (JSQLParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
附件: 您所在的用户组无法下载或查看附件

TOP

发新话题