我正在查询可能会发生变化的视图中的数据.在我做之前我需要知道列是否存在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
而不是数据库的原因.
一般的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.
您提出的解决方案是否存在让您认为不正确的问题?这对我来说似乎很简单......
如果列不在CachedRowSet中,你可以采用较短的方法来使用findColumn()为InvalidColumName抛出SQLException这一事实.
例如
try { int foundColIndex = results.findColumn("nameOfColumn"); } catch { // do whatever else makes sense }
可能是滥用异常处理(根据EffectiveJava第2版第57项),但它是循环遍历元数据中所有列的替代方法.