gpt4 book ai didi

java - 如何使用JSQLParser将插入sql语句转换为删除sql语句

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

我想使用JSQLParser将插入sql语句转换为删除sql语句,如何才能实现这一点?例如,这里是示例插入 SQL

INSERT INTO emp (empno, ename, job, sal, comm, deptno, joinedon) VALUES (4160, 'STURDEVIN', 'SECURITY GUARD', 2045, NULL, 30, TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));

转换后删除sql将如下

DELETE FROM emp WHERE empno=4160 AND ename='STURDEVIN' AND job='SECURITY GUARD' AND sal=2045 AND comm=NULL AND deptno=30 AND joinedon=TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF');

这是迄今为止的代码

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.operators.relational.ItemsList;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;

import java.util.List;

public class Main {

public static void main(String[] args) {
String insertSQL = "INSERT INTO emp (empno, ename, job, sal, comm, deptno, joinedon) VALUES (4160, 'STURDEVIN', 'SECURITY GUARD', 2045, NULL, 30, TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));";
final Statement statement;
try {
statement = CCJSqlParserUtil.parse(insertSQL);
if (statement instanceof Insert) {
final Insert insertStatement = (Insert) statement;
System.out.println("insertStatement: " + insertStatement);
List<Column> columns = insertStatement.getColumns();
for (final Column column : columns) {
System.out.println("column: " + column);
}
ItemsList itemsList = insertStatement.getItemsList();
System.out.println("itemsList: " + itemsList);
final Delete deleteStatement = new Delete();
deleteStatement.setTable(insertStatement.getTable());
System.out.println("deleteStatement: " + deleteStatement);
}
} catch (JSQLParserException e) {
e.printStackTrace();
}
}
}

我正在使用 maven 构建这个项目,这里是 pom 依赖项。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>oracle.insert.delete.jsqlparser</groupId>
<artifactId>oracle_from_insert_to_delete_using_JSqlParser</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.2</version>
</dependency>
</dependencies>


</project>

部分遗留代码,这些插入语句是为了设置测试数据而编写的,我想在测试完成后自动清理测试数据。并且不依赖于拆卸中写得不好的删除语句。

最佳答案

这将是一种方法(添加的代码从“//获取值列表”开始):

public class Main {

public static void main(String[] args) {
String insertSQL = "INSERT INTO emp (empno, ename, job, sal, comm, deptno, joinedon) VALUES (4160, 'STURDEVIN', 'SECURITY GUARD', 2045, NULL, 30, TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'));";
final Statement statement;
try {
statement = CCJSqlParserUtil.parse(insertSQL);
if (statement instanceof Insert) {
final Insert insertStatement = (Insert) statement;
System.out.println("insertStatement: " + insertStatement);
List<Column> columns = insertStatement.getColumns();
for (final Column column : columns) {
System.out.println("column: " + column);
}
ItemsList itemsList = insertStatement.getItemsList();
System.out.println("itemsList: " + itemsList);
final Delete deleteStatement = new Delete();
deleteStatement.setTable(insertStatement.getTable());

// get the list of values
ExpressionList expressionList = (ExpressionList) itemsList;
List<Expression> values = expressionList.getExpressions();

// create the "column = value" expressions list
List<Expression> expressions = new ArrayList<>();
for (int i = 0; i < columns.size(); i++) {
// create the "column = value" expression
EqualsTo equalsTo = new EqualsTo();
equalsTo.setLeftExpression(columns.get(i));
equalsTo.setRightExpression(values.get(i));

// add it to the list
expressions.add(equalsTo);
}

// glue together the expressions with "ANDs"
// it is now our where expression
MultiAndExpression whereExpression = new MultiAndExpression(expressions);

deleteStatement.setWhere(whereExpression);

System.out.println("deleteStatement: " + deleteStatement);
}
} catch (JSQLParserException e) {
e.printStackTrace();
}
}
}

它生成此删除语句:

DELETE FROM emp WHERE (empno = 4160 AND ename = 'STURDEVIN' AND job = 'SECURITY GUARD' AND sal = 2045 AND comm = NULL AND deptno = 30 AND joinedon = TO_TIMESTAMP('2014-07-02 06:14:00.742000000', 'YYYY-MM-DD HH24:MI:SS.FF'))

关于java - 如何使用JSQLParser将插入sql语句转换为删除sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52083988/

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