是否有任何方法来检查行中是否存在多列的值

问题描述:

我有一个字符串变量abc。现在我想检查abc的值是否存在于多个COLUMNS的搜索行格式sql(表X)中。是否有任何方法来检查行中是否存在多列的值

因此,如果(abc)出现在COLUMN01 ,COLUMN02, ....COLUMN50。假设标志PRESENT已设置。

我有这样的要求。它可以通过硬编码和逐一检查所有50列来完成。

有没有其他办法?

+1

没有理由大喊(大写被认为是大喊)。只要正常询问,并显示你一直在尝试。 – Thomas 2011-12-27 08:40:49

+0

是的,我的错误!谢谢 – 2011-12-27 09:33:04

我想不出一个真正聪明的方法,但是您可以迭代结果集中的所有列(应该可以执行而不知道有多少列),并在迭代时检查它们。

事情是这样的:

ResultSetMetaData meta = resultSet.getMetaData(); 
for(int i = 1; i <= meta.getColumnCount(); ++i) { 
    //check the type of the column, you might want to check more types than VARCHAR 
    if(meta.getColumnType(i) == VARCHAR) { 
    //check for the value "abc" 
    if("abc".equals(resultSet.getString(i))) { 
     //found it 
    } 
    } 
} 
+0

这是我认为的最佳解决方案。但是这会检查所有的列。我只需要检查仅50个连续列('ABC01到ABC50')。 – 2011-12-27 09:31:17

+0

@AbhishekBhandari如果您知道列名为'ABC01'到'ABC50',您可以跳过元数据检查,从1迭代到50并按名称访问列(这是通过连接ABC和索引构成的2 - 数字 - 我将把它作为你的谷歌技能练习:))。 – Thomas 2011-12-27 09:55:13

+0

谢谢托马斯你的想法.. – 2011-12-28 04:05:35

您可能想要使用SQL WHERE clauseSQL IN Operator。请参考this

+0

SANDEEP,可以让你充满活力。我相信你的问题会好起来的。 – 2011-12-27 08:42:26

+1

请参阅链接。 – Muse 2011-12-27 08:42:45

+1

我不认为这是他问的问题。他希望搜索所有列,而不必实际为所有列执行WHERE子句 – Matt 2011-12-27 08:44:13

的SQL“IN”条款可能对你有用:

SELECT * FROM ... WHERE "abc" IN (COLUMN01, COLUMN02, COLUMN03, ... COLUMN50) 

您可以在选定的领域使用它,而不是在WHERE子句中,如果你想一个“存在”标志:

SELECT *, ("abc" IN (COLUMN01, COLUMN02, COLUMN03, ... COLUMN50)) AS present FROM ... WHERE ... 

没有直接的方法来搜索horizo​​nt盟友,所以你仍然需要列出所有的列,但abc变量只需要一次进入。

如果这不是你想要的,请更详细。

+0

是的几乎到了解决方案。如果没有其他选择,我必须采用这种方式。但事实上,我正在试图用java来做到这一点。首先,我将在'DTO列表'中获得记录表格'DB'。然后我不知道我是否可以购买,我会尝试用java反射来做到这一点。 :) – 2011-12-27 09:09:06

对于每一行,遍历所有的coloumns,并设置标志为false,以防一个结果不相等。

flag=true; 

while (rs.next()) { 

     for(int 1=1;i<=50;i++) 
      { 
      if(!rs.getString(i).equals(abc)){ flag=false;break; } 

      } 
} 

谢谢托马斯。我用反思实现了这个想法,因为我打算这么做!好东西Java反射。

String ColumnPrefix = "Abc"; 
    SomeDto kals = new SomeDto(); 
    kals = (SomeDto)DbResult 

    Class klsss = kals.getClass(); 
    Method[] method = klsss.getDeclaredMethods(); 
    for (int i = 0; i < method.length; i++) { 
     Method m= method[i]; 
     if (m.getName().toString().startsWith("get".concat(ColumnPrefix))) { 
      m.setAccessible(true); 
      try { 
       String returnValue = (String) m.invoke(kals, null); 
       if ("test me".equals(returnValue)) { 
        System.out.println("this is working"); 
        break; 
       } 
      } catch (IllegalArgumentException e) { 
       System.out.println("Illegal argument"); 
      } catch (IllegalAccessException e) { 
       System.out.println("Illegal IllegalAccessException Ecxeption"); 
       e.printStackTrace(); 
      } catch (InvocationTargetException e) { 
       System.out.println("Illegal InvocationTargetException Ecxeption"); 
       e.printStackTrace(); 
      } 

     } 

    }'