2012-07-16 477 views
1

我想知道是否可以使用jsqlparser将表达式添加到sql查询中。例如,我想向sql语句添加一列和一个值:将语句添加到jsqlparser中的sql查询

原始查询:“INSERT INTO frontendin_reply_to)VALUES(email);”

修改后的查询: “INSERT INTO frontendin_reply_touser_id)VALUES(email,123)”

我设法修改列名,但不能添加一个。

这里是我的代码:

 ExtendedItemsListVisitor visitor = new ExtendedItemsListVisitor() { 
      private List expressions = null; 

      public List getExpressions() { 
       return this.expressions; 
      } 

      public void setExpressions(ExpressionList expressionList) { 
       this.expressions = expressionList.getExpressions(); 
      } 

      public void visit(SubSelect subSelect) { 
      } 

      public void visit(ExpressionList expressionList) { 
       this.expressions = expressionList.getExpressions(); 
      } 
     }; 

     ItemsList itemsList = ((Insert)statement).getItemsList(); 
     itemsList.accept(visitor); 
     ExpressionList expressions = (ExpressionList)visitor1.getExpressions(); 

     Expression expression = new StringValue(newValue); 
     ExpressionVisitor visitor = new SetValueExpressionVisitor(newValue); 

回答

1

我知道有点晚。但这是一个解决方案。首先,我们创建一个测试插入语句:

Insert insert = (Insert)CCJSqlParserUtil.parse("insert into mytable (col1) values (1)"); 
System.out.println(insert.toString()); 

现在使用访问者模式来添加一个新值的变异:

insert.getColumns().add(new Column("col2")); 
insert.getItemsList().accept(new ItemsListVisitor() { 

     public void visit(SubSelect subSelect) { 
      throw new UnsupportedOperationException("Not supported yet."); 
     } 

     public void visit(ExpressionList expressionList) { 
      expressionList.getExpressions().add(new LongValue(5)); 
     } 

     public void visit(MultiExpressionList multiExprList) { 
      throw new UnsupportedOperationException("Not supported yet."); 
     } 
}); 
System.out.println(insert.toString()); 

但使用访问者模式是矫枉过正的一点点去实现它。这里是简单的解决方案:

insert.getColumns().add(new Column("col3")); 
((ExpressionList)insert.getItemsList()).getExpressions().add(new LongValue(10)); 
System.out.println(insert.toString()); 

所以是的,你可以修改JSQLParser的SQL层次结构。我正在使用JSQLParser 0.8.9 SNAPSHOT。目前正在修改以改进这种可修改性。