rs.getString()仅为动态select语句选择了列

时间:2014-07-09 08:14:04

标签: java jdbc

我是一个动态查询,如: -

"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方法的内容应该是什么?这种方法的表现有多好?

6 个答案:

答案 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。