如何使用WHERE in子句在Marklogic JAVA API中编写SQL查询?

如何使用WHERE in子句在Marklogic JAVA API中编写SQL查询?,java,marklogic,marklogic-9,Java,Marklogic,Marklogic 9,我正在使用Marklogic Optic Java API,如下所示:- ModifyPlan plan = p.fromView(SchemaName, ViewName) .where(p.eq(p.col("COL1"), strColValue)) .select(colSeq); 现在我有了数据列表&我需要在这个查询中使用WHERE-IN子句 select * from table where col in ('val1', '

我正在使用Marklogic Optic Java API,如下所示:-

ModifyPlan plan = p.fromView(SchemaName, ViewName)
              .where(p.eq(p.col("COL1"), strColValue))
              .select(colSeq);
现在我有了数据列表&我需要在这个查询中使用WHERE-IN子句

select * from table where col in ('val1', 'val2'.....,'valn');
谁能告诉我如何使用MarkLogicJavaAPI来实现这一点

谢谢和问候


Renuka Patil

使用Java在Marklogic DB上使用SQL的一种方法是JDBC。您可以执行以下步骤:

  • 第1步:
  • 从以下位置下载JDBC驱动程序: &在Java项目中引用它

  • 第二步:
  • 在Marklogic DB上设置ODBC服务器,如中所述: (请记住在此步骤中选择正确的数据库&对于本例,请将Auth type更改为Basic)

  • 第三步:
  • 示例Java代码可以如下所示:

    try {
                Connection conn1 = DriverManager.getConnection("jdbc:postgresql://MYHOST:PORT/?preferQueryMode=simple","USER","PWD");
                Statement stmt = conn1.createStatement();
                String sqlstmt = "select SCHEMA.VIEW.COLUMN1, VSCHEMA.VIEW.COLUMN2, SCHEMA.VIEW.COLUMN3 from SCHEMA.VIEW where SCHEMA.VIEW.COLUMN4 in ('VAL1', 'VAL2', 'VAL3')";
                ResultSet rs = stmt.executeQuery(sqlstmt);
                while(rs.next()){ 
                    String c1= rs.getString("COLUMN1"); 
                    String c2= rs.getString("COLUMN2");
                    System.out.println("COL1:"+c1);
                    System.out.println("COL2:"+c2);
                }
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
    
    注:

  • 上面显示的代码只是为了显示连接的可能性&而不是工业化版本。因此,应在使用时进行重构 根据编码Gudeline,如删除硬编码和使用绑定查询等
  • 端口号是中用于ODBC服务器设置的端口号 马克逻辑

  • 希望它能帮助您:-)

    最简单的方法可能是在连接条件的右侧传入一系列字符串:

    ModifyPlan plan = p.fromView(SchemaName, ViewName)
        .where(p.eq(p.col("COL1"), p.xs.stringSeq("val1", "val2",...,"valn")))
        .select(colSeq);
    

    我看到
    p.xs.stringSeq
    已被弃用。本文件建议我方按以下方式使用:

    {
        ModifyPlan plan = p.fromView(SchemaName, ViewName)
                           .where(p.eq(p.col("COL1"), 
                                   p.seq(p.xs.string("val"),p.xs.string("val2"))))
                           .select(colSeq);
    }
    
    我从
    p.xs.stringSeq
    更改为
    p.seq