【问题标题】:How write SQL Query in Marklogic JAVA API using WHERE IN clause?如何使用 WHERE IN 子句在 Marklogic JAVA API 中编写 SQL 查询?
【发布时间】:2018-09-28 16:09:15
【问题描述】:

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

感谢和问候,

雷努卡·帕蒂尔

【问题讨论】:

    标签: java marklogic marklogic-9


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用 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. 上面显示的代码只是为了显示连接的可能性而不是工业化版本。因此在使用时应该重构 根据编码准则,例如删除硬编码和使用绑定查询等
      2. 端口号是用于 ODBC 服务器设置的端口号 标记逻辑。

      希望对你有帮助:-)

      【讨论】:

        【解决方案3】:

        我看到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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-07
          • 1970-01-01
          • 1970-01-01
          • 2019-08-08
          相关资源
          最近更新 更多