2012-07-16 480 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。目前正在修改以改進這種可修改性。