gpt4 book ai didi

java - 在 Java 中解析多行 SQL 语句的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-02 00:54:10 26 4
gpt4 key购买 nike

我对 Java 还很陌生,但我正在寻找可以采用多行 SQL 语句的 Java 代码,在平面文件中说这样的话:

CREATE OR REPLACE TRIGGER REQ.TR_INPT_STAY_DETAI_SQ_BI
BEFORE INSERT ON REQ.INPT_STAY_DETAIL
FOR EACH ROW
BEGIN
SELECT REQ.SQ_INPT_DETAIL.nextval INTO :new.INPT_STAY_DETAIL_PID from DUAL;
END;

并将这些多行语句转换为一行 SQL 语句,如下所示(可能包含在此显示中),以针对 Oracle 数据库作为单个 JDBC 语句执行:

CREATE OR REPLACE TRIGGER REQ.TR_INPT_STAY_DETAI_SQ_BI BEFORE INSERT ON REQ.INPT_STAY_DETAIL FOR EACH ROW BEGIN SELECT REQ.SQ_INPT_DETAIL.nextval INTO :new.INPT_STAY_DETAIL_PID from DUAL; END;

我尝试使用多个 BufferedReader 和/或使用 mark() 方法来执行此操作,但我似乎无法让它工作。

问题似乎出在长语句末尾和 END 的分号上;声明。

您对最简单的方法有何看法?

<小时/>

我认为我取得了一些进展,但是如果同一个 SQL 输入文件还有更简单的 SQL 命令,例如:

DROP TABLE TABLE.NAME_HERE;

他们会在我的第一个条件上失败:

if ( !thisLine.startsWith("END;") && !thisLine.equals("/") ) {
sqlBuf.append(thisLine).append(" ");
statementReady = false;
}
else if (thisLine.startsWith("END;")) {
sqlBuf.append(thisLine).append(" ");
statementReady = true;
}
else if (thisLine.equals("/")) {
statementReady = true;
}
else { }

稍后在运行 .execute 之前检查 statemendReady 变量。

最佳答案

只需读取每一行,然后使用 StringBuilder 附加它们,但是,不要附加任何包含 End; 的行,因为您的查询不需要它。

如果文件中有该内容,您还应该忽略 Go

然后你只需将 StringBuilder 转换为 String 就可以了。

记住在每行之间留一个空格。

有关从文件中读取多行的更多信息,您可以查看: http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml

重要的部分是:

StringBuilder buf = new StringBuilder();
while ((strLine = br.readLine()) != null) {
if (!strLine.startsWith("End"))
buf.append(strLine).append(" ");
}

关于java - 在 Java 中解析多行 SQL 语句的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1631747/

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