2

我正在使用 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来做到这一点。

感谢和问候,

雷努卡·帕蒂尔

4

3 回答 3

3

Probably the easiest way to do that is to just pass in a sequence of strings on the right hand side of the join condition:

ModifyPlan plan = p.fromView(SchemaName, ViewName)
    .where(p.eq(p.col("COL1"), p.xs.stringSeq("val1", "val2",...,"valn")))
    .select(colSeq);
于 2018-04-19T09:31:57.933 回答
1

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

  1. 第1步:

从以下网址下载 JDBC 驱动程序:https ://jdbc.postgresql.org/download/postgresql-42.1.4.jar 并在您的 Java 项目中引用它。

  1. 第2步:

按照以下说明在 Marklogic DB 上设置 ODBC 服务器:https ://docs.marklogic.com/guide/admin/odbc (请记住在此步骤中选择正确的数据库,对于此示例,将身份验证类型更改为基本)

  1. 第 3 步:

示例 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. The code shown above is just to show the possibility of connection & not industrialized version. Hence should be refactored while using as per coding gudelines like removing hardcoding & use of binded queries, etc
  2. Port Number is one which was used for ODBC server setup in Marklogic.

Hope it helps you :-)

于 2018-04-19T08:11:56.177 回答
-1

I see p.xs.stringSeq is deprecated. The documentation is preferring us to use as below:

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

I changed from p.xs.stringSeq to p.seq

于 2019-05-18T10:35:45.703 回答