gpt4 book ai didi

java - 用Java解析SQL文件并获取语句和注释

转载 作者:行者123 更新时间:2023-12-01 15:38:13 27 4
gpt4 key购买 nike

Possible Duplicate:
SQL parser library for Java

我想使用现成的解决方案来解析 SQL 文件。文件可以包含注释、SQL 语句、DDL。我需要获取注释,所有 SQL 语句。有谁知道现成的解决方案?我不想再发明一个方轮..

附注请注意,我不需要忽略评论,我需要从文件中的评论中获取文本

最佳答案

就其值(value)而言,我建议您查看 iBatis,恕我直言,它使带有 JDBC 的手写 DAO 和 DTO 完全过时了。

在 iBatis 之前,我习惯将 SQL 保存在单独的 SQL 文件中,并在需要时检索正确的 SQL。我不再使用它...因为这在实际的 Java 代码中只比 SQL 好一点点。

SQL文件的语法如下:

-- I added comments like this...
[id] {
any SQL statement... (quite frankly any text).
}

[id2] {
...
}

...

然后,一个简单的解析器类如下:

public class SQLParser {
private static Logger logger = LoggerUtility.getLogger(SQLParser.class);

private String raw;
private Map<String, String> sql;

public SQLParser(InputStream is) {
sql = new HashMap<String, String>();
try {
read(is);
parse();
} catch (IOException e) {
logger.debug(LoggerCodes.TRACE, "Input Stream could not be successfull read!");
}
}

private void read(InputStream is) throws IOException {
StringBuilder builder = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String line = in.readLine();
while (line != null) {
builder.append(line + "\n");
line = in.readLine();
}
raw = builder.toString();
}

public String getSql(String sqlId) {
return sql.get(sqlId);
}

public PreparedStatement getSql(Connection connection, String sqlId) throws SQLException {
String statement = sql.get(sqlId);
return connection.prepareStatement(statement);
}

private void parse() {
if (raw == null) {
logger.debug(LoggerCodes.TRACE, "No String to parse for SQL statements!");
return;
}

String regex = "\\.*\\[(\\S*)\\]\\s*\\{\\s*([^\\}]*)\\s*\\}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(raw);
while (m.find()) {
String key = m.group(1);
String body = m.group(2);
logger.debug("Adding " + key + " to SQL map.");
sql.put(key, body.trim());
}
}
}

然后只需创建上述实例的新实例并调用 sqlParser.getSql(id) 即可获取正确的 SQL。

关于java - 用Java解析SQL文件并获取语句和注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531293/

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