Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java rs.getString()仅为动态select语句选择列_Java_Jdbc - Fatal编程技术网

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

Java rs.getString()仅为动态select语句选择列,java,jdbc,Java,Jdbc,我有一个动态查询,如下所示:- "SELECT " + commaSeparatedFields + " FROM table" 现在,在获取结果集时,我想检查是否选择了字段,如果为true,则在bean中设置值,否则设置null 解释我想做什么的示例代码:- Bean bean = new Bean( isSelected(rs, "FIRSTNAME") ? rs.getString("FIRSTNAME") : null, isSelected(rs, "LASTNAM

我有一个动态查询,如下所示:-

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

您知道在
逗号分隔字段中传递的值吗?如果这样做,只需调用
.contains
而不是isSelected方法。希望我了解您的需要。

您知道在
逗号分隔字段中传递的值吗?如果这样做,只需调用
.contains
而不是isSelected方法。我希望我了解您的需要。

可能的伪代码可以是-(您可以根据需要添加更多的检查)


可能的伪代码可以是-(您可以根据需要添加更多的检查)


最简单的方法是按照@Michael对columnnames字符串的建议直接使用contains,或者通过“,”和检查将其拆分

或者,使用元数据。我还没有试过,但是,这可能会有帮助

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
}
ResultSet rs=stmt.executeQuery(“从表2中选择a、b、c”);
ResultSetMetaData rsmd=rs.getMetaData();
int numberOfColumns=rsmd.getColumnCount();
ArrayList selectedColumns=新建ArrayList();

对于(int i=0;i来说,最简单的方法是直接使用@Michael建议的columnnames字符串上的contains,或者通过“,”和检查将其拆分

或者,使用元数据。我还没有尝试过,但是,这可能会有所帮助

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
}
ResultSet rs=stmt.executeQuery(“从表2中选择a、b、c”);
ResultSetMetaData rsmd=rs.getMetaData();
int numberOfColumns=rsmd.getColumnCount();
ArrayList selectedColumns=新建ArrayList();

对于(int i=0;i您是否尝试了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;
}
public boolean isSelected(结果集rs,字符串columnName)引发SQLException
{
ResultSetMetaData meta=rs.getMetaData();

对于(int i=0;i您是否尝试了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;
}
public boolean isSelected(结果集rs,字符串columnName)引发SQLException
{
ResultSetMetaData meta=rs.getMetaData();

对于(int i=0;i,如果查询只处理字符串,则可以更改为提取值的函数:

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)
ResultSet rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();

对于(int i=1;i,如果查询仅处理字符串,则可以更改为提取值的函数:

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)
ResultSet rs=ps.executeQuery();
ResultSetMetaData rsmd=rs.getMetaData();


对于(int i=1;我请查看带有列名的ResultSetMetadata我认为@AStranger、Michael Sanchez和Daniel的答案会很完美。我实际上是在实现Daniel所做的。但是,哪一项性能最好?我认为Michael Sanchez提供了一个很好的解决方案(简单且更快)。但是请注意,
contains
是一种区分大小写的方法,SQL是不区分大小写的。您考虑过这段代码在设计方面是否真的是一个好的选择吗?在静态键入面前,它无疑是一个湿手套。@Kayaman有什么建议吗?请查看带有列名称的ResultSetMetadata我想@Astanger,M给出了答案ichael Sanchez和Daniel会工作得很好。我实际上是在实现Daniel所做的。但是,哪一个会有最好的性能?我认为Michael Sanchez提供了一个很好的解决方案(简单且快速)。但是请注意,
contains
是一种区分大小写的方法,SQL是不区分大小写的。您考虑过这段代码在设计方面是否真的是一个好的选择吗?在静态键入方面它肯定是一个湿手套。@Kayaman有什么建议吗?这段代码性能很好,而不是@krishna代码,我们需要创建它每次迭代时列出..这段代码提供了良好的性能而不是@krishna代码,在这里我们每次迭代时都需要创建列表..将出现两个循环。一个用于创建列列表,另一个用于contains()方法没错。只是想说明如何使用resultset元数据。正如我提到的,最好的方法是Michael建议的-使用contains和setters。将出现两个循环。一个用于创建列列表,另一个用于contains()方法没错。只是想说明如何使用resultset元数据。正如我提到的,最好的方法是Michael建议的——使用contains和setters。我认为
。contains
检查可以在ISSELECT方法中完成,如果需要:)我认为
。contains
检查可以在ISSELECT方法中完成:)