我是一个动态查询,如: -
"SELECT " + commaSeparatedFields + " FROM table"
现在,在获取结果集时,我想检查是否选择了一个字段,如果为true,则在bean中设置值,否则设置为null。
示例代码解释我想要做的事情: -
Bean bean = new Bean(
isSelected(rs, "FIRSTNAME") ? rs.getString("FIRSTNAME") : null,
isSelected(rs, "LASTNAME") ? rs.getString("LASTNAME") : null,
isSelected(rs, "EMAIL") ? rs.getString("EMAIL") : null);
isSelected
方法的内容应该是什么?这种方法的表现有多好?
答案 0 :(得分:2)
您是否尝试过ResultsetMetadata?样品如下:
public boolean isSelected(ResultSet rs, String columnName) throws SQLException
{
ResultSetMetaData meta=rs.getMetaData();
for(int i=0;i<meta.getColumnCount();i++)
{
if(meta.getColumnName(i).equals(columnName))
return true;
}
return false;
}
答案 1 :(得分:1)
您知道commaSeparatedFields
中传递的值吗?如果您这样做,只需拨打.contains
来代替isSelected方法。我希望我理解你的需要。
答案 2 :(得分:1)
如果您的查询只处理字符串,您可以更改为提取值的函数:
String getColumnValue(ResultSet rs , String columnName){
try{
return rs.getString(columnName);
}catch(SqlException){
return null;
}
}
或使用类ResultSetMetaData
,这对于像您这样的动态查询非常灵活。
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
//do your job here
//rsmd.getColumnType(i))
//rsmd.getColumnLabel(i)
}
答案 3 :(得分:0)
可能的伪代码可以是 - (您可以根据您的要求添加更多支票)
public boolean isSelected(ResultSet rs, String column){
return (rs.getString(column) != null);
}
答案 4 :(得分:0)
最简单的方法是直接在columnnames字符串上使用contains @Michael,或者用&#34;,&#34;并检查。
或者,使用元数据。我没有尝试过,但是,这可能会有所帮助。
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
ArrayList<String> selectedColumns= new ArrayList();
for (int i=0; i<numberOfColumns ;i++) {
selectedColumns.add(rsmd.getColumnName(i));
}
if (selectedColumns.contains(columnName) {
//TODO: Do something
}
答案 5 :(得分:-1)
isSelected方法将返回布尔值,true或false。