java.sql : Validate ResultSet format

标签 java validation jdbc

我想解析 java.sql.ResultSet进入Map<String, String> ,我想验证三件事:

  • 第一列应命名为 key并且应该是 String 类型
  • 第二列应命名为 value并且应该是 String 类型
  • 没有第三列

这是我目前在类里面学到的内容 HiveStatementOutputContent :

protected Map<String, String> keyValueOutput;

public HiveStatementOutputContent(ResultSet s) throws Exception {

    if(s.findColumn("key") != 0 )
        throw new Exception("Error in SQL result: First column has to be 'key'.");
    if(s.findColumn("value") != 1)
        throw new Exception("Error in SQL result: Second column has to be 'value'.");

    //TODO: Validate type

    //TODO: Validate number of columns

    while ( s.next() )
    {
        keyValueOutput.put(s.getString(0),s.getString(1));
    }
}

最好的方法是什么?

最佳答案

如果您关心哪个项目作为键插入以及哪个项目作为值插入,我认为在迭代 ResultSet 并获取字符串时仅使用列别名要简单得多。

while ( s.next() )
{
    keyValueOutput.put(s.getString("key"),s.getString("value"));
}

https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getString(java.lang.String)

您不会在 SQL 结果中的 value 之前获得 key 的验证,但您将代码位与 SQL 解耦,因为所有代码上面关心的是有一个 key 和一个 value 列(或者通过 SQL 中的确切列名,或者通过 SQL 中的 AS 别名) SQL 查询)。

如果要验证列的顺序、列名和数据类型,可以通过调用 s.getMetaData() 来使用 ResultSetMetaData 对象。然后,您可以调用 metadata.getColumnName(int)metadata.getColumnType(int) 来验证列的名称和数据类型。您还可以利用 getColumnCount 来验证您没有提取任何额外的列。 看: https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html#getColumnName(int) https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSetMetaData.html#getColumnType(int)

关于java.sql : Validate ResultSet format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49282502/

相关文章:

java - JAX-RS @CookieParam 值从一个请求更改为另一个请求

java - JSF 2.1 + RichFaces 4 - 更改 rich :dataScroller default stylesheet

java - 使用 ControllerService 进行 NiFi 处理器 JUnit 测试

col、row 和 square 上的 Javascript 表验证

wpf - ValidatesOnExceptions 的工作原理

java: double == 和 Double equals

javascript - 检查输入值是否为空并显示警报

从 mysql 数据库中检索 java.sql.Date 对象时,Java 方法停止,为什么?

java - 尽管查询在其他地方工作,SqlitePreparedStatement 不返回结果集

sql-server - SQLServer异常: The conversion from timestamp to TIMESTAMP is unsupported.