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

时间:2018-04-18 12:06:30

标签: 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', 'val2'.....,'valn');

有没有人可以告诉我如何使用marklogic Java API。

谢谢&的问候,

Renuka Patil

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

  1. 第1步:
  2. https://jdbc.postgresql.org/download/postgresql-42.1.4.jar下载JDBC驱动程序  &安培;在Java项目中引用它。

    1. 第2步:
    2. 按照以下所述在Marklogic DB上设置ODBC服务器:https://docs.marklogic.com/guide/admin/odbc (请记住在此步骤中选择正确的数据库&对于此示例,将Auth类型更改为Basic)

      1. 第3步:
      2. 示例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();
                }
        

        注意:

        1. 上面显示的代码只是为了显示连接的可能性。不是工业化版本。因此在使用时应该重构 根据编码保护,如删除硬编码&使用绑定查询等
        2. 端口号是用于ODBC服务器设置的端口号 Marklogic。
        3. 希望它可以帮助你: - )

答案 2 :(得分:-1)

我发现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