gpt4 book ai didi

java - 在 jsqlparser 中向 sql 查询添加语句

转载 作者:行者123 更新时间:2023-11-30 09:35:11 25 4
gpt4 key购买 nike

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

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

修改后的查询:“INSERT INTO frontend(in_reply_to, user_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);

最佳答案

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

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。正在进行修改以提高这种可修改性。

关于java - 在 jsqlparser 中向 sql 查询添加语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com