在我们的项目中,我们需要在没有任何数据库服务器的情况下评估 SQL 语句。您能否推荐任何能够评估基于数学的 SQL 语句并返回结果的免费 Java 库?
例如;
SELECT 2*2 AS RESULT
4
可能会被称为int result = SQLEvaluator.evaluate("SELECT 2*2 AS RESULT");
可以使用ZQL来实现这一点,如下面的代码所示。但我认真建议您选择一个简单的嵌入式数据库,例如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();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
4
5
9
Run Code Online (Sandbox Code Playgroud)
要使用它,请将其添加到您的pom.xml:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.171</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
4.0
5.0
9.0
Run Code Online (Sandbox Code Playgroud)
对于依赖项,可以从ZQL 页面下载,或者出于测试目的,将其添加到您的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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3810 次 |
| 最近记录: |