当前位置:  开发笔记 > 编程语言 > 正文

如何检查CachedRowSet中是否存在列名?

如何解决《如何检查CachedRowSet中是否存在列名?》经验,为你挑选了2个好方法。

我正在查询可能会发生变化的视图中的数据.在我做之前我需要知道列是否存在crs.get******().我发现我可以查询这样的元数据,以便在我从中请求数据之前查看列是否存在.

ResultSetMetaData meta = crs.getMetaData();
int numCol = meta.getColumnCount();

for (int i = 1; i < numCol+1; i++) 
    if(meta.getColumnName(i).equals("name"))
        return true;

有没有更简单的方法来检查列是否存在?

编辑:它必须是数据库不可知的.这就是我引用CachedRowSet而不是数据库的原因.



1> Jared..:

一般的JDBC API没有更简单的方法(至少不是我所知道的,或者可以找到......我在我自己开发的工具集中有完全相同的代码.)

(您的代码不完整):

ResultSetMetaData meta = crs.getMetaData();
 int numCol = meta.getColumnCount();

for (int i = 1; i < numCol+1; i++) 
{
    if(meta.getColumnName(i).equals("name"))
    {return true;}

}
return false;

话虽这么说,如果您使用专有的,特定于数据库的API和/或SQL查询,我相信您可以找到更优雅的方法来做同样的事情......但是您必须为每个数据库编写自定义代码需要处理.如果我是你,我会坚持使用JDBC API.

您提出的解决方案是否存在让您认为不正确的问题?这对我来说似乎很简单......



2> 小智..:

如果列不在CachedRowSet中,你可以采用较短的方法来使用findColumn()为InvalidColumName抛出SQLException这一事实.

例如

 try {
     int foundColIndex = results.findColumn("nameOfColumn");
} catch {
  // do whatever else makes sense
}

可能是滥用异常处理(根据EffectiveJava第2版第57项),但它是循环遍历元数据中所有列的替代方法.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有