gpt4 book ai didi

java - 在 Java 中评估 SQL 表达式?

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:00 25 4
gpt4 key购买 nike

在我们的项目中,我们需要在没有任何数据库服务器的情况下评估 SQL 语句。您能否推荐任何能够评估基于数学的 SQL 语句并返回结果的免费 Java 库?

例如;

输入

选择 2*2 作为结果

输出

4

可能会被称为 int result = SQLEvaluator.evaluate("SELECT 2*2 AS RESULT");

最佳答案

可以使用 ZQL 来实现如下面的代码所示。但我强烈建议您选择一个简单的嵌入式数据库,例如 H2 ( example here ) 并改用它(项目健康度更高)。

使用 H2:

public class H2ExpEval {
public static void main(String... args) throws Exception {
evaluateUsingH2("SELECT 2+2");
evaluateUsingH2("SELECT 3+7-5");
evaluateUsingH2("SELECT 2*2*2+1");
}

private static void evaluateUsingH2(String sql) throws Exception {
Class.forName("org.h2.Driver");
// opens an in-memory database: no files are saved and it's all quicker
Connection conn = DriverManager.getConnection("jdbc:h2:mem:");
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(sql);
if (rs.next()) {
System.out.println(rs.getString(1));
}
stat.close(); conn.close();
}
}

输出:

4
5
9

要使用它,请将其添加到您的 pom.xml:

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.171</version>
</dependency>

使用 ZQL:

public class ZqlEvalDemo {
public static void main(String args[]) throws Exception {
System.out.println(evaluate("SELECT 2+2 FROM RESULT;"));
System.out.println(evaluate("SELECT 3+7-5 FROM RESULT;"));
System.out.println(evaluate("SELECT 2*2*2+1 FROM RESULT;"));
}

private static ZqlParser p = new ZqlParser();
private static Object evaluate(String s) throws Exception {
p.initParser(new java.io.ByteArrayInputStream(s.getBytes()));
ZStatement st = p.readStatement();
ZSelectItem zSelectItem = ((ZQuery) st).getSelect().get(0);
ZExpression exp = (ZExpression) zSelectItem.getExpression();
return new ZEval().evalExpValue(new ZTuple(), exp);
}
}

输出:

4.0
5.0
9.0

对于依赖项,可以从 ZQL Page 下载或者,出于测试目的,将此添加到您的 pom.xml(测试目的,因为我们不知道谁维护该存储库):

<dependencies>
<dependency>
<groupId>com.experlog</groupId>
<artifactId>zql</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>zql</id>
<name>zql</name>
<url>http://dbappserv.cis.upenn.edu:8080/artifactory/ext-releases-local</url>
</repository>
</repositories>

关于java - 在 Java 中评估 SQL 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423801/

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