如何使用 WHERE IN 子句在 Marklogic JAVA API 中编写 SQL 查询?
How write SQL Query in Marklogic JAVA API using WHERE IN clause?
我正在使用 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 DB 上使用 SQL 的一种方法是 JDBC.You 可以执行以下步骤:
- 第 1 步:
从以下位置下载 JDBC 驱动程序:https://jdbc.postgresql.org/download/postgresql-42.1.4.jar
& 在你的 Java 项目中引用它。
- 第 2 步:
如中所述在 Marklogic DB 上设置 ODBC 服务器:https://docs.marklogic.com/guide/admin/odbc
(请记住 select 在此步骤中使用正确的数据库,对于此示例,将 Auth 类型更改为 Basic)
- 第 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();
}
注:
- 上面显示的代码只是为了显示连接的可能性,而不是工业化版本。因此应该在使用时重构
根据编码准则,例如删除硬编码和使用绑定查询等
- 端口号是用于 ODBC 服务器设置的端口号
Marklogic.
希望对您有所帮助:-)
可能最简单的方法是在连接条件的右侧传入一个字符串序列:
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
我正在使用 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 DB 上使用 SQL 的一种方法是 JDBC.You 可以执行以下步骤:
- 第 1 步:
从以下位置下载 JDBC 驱动程序:https://jdbc.postgresql.org/download/postgresql-42.1.4.jar & 在你的 Java 项目中引用它。
- 第 2 步:
如中所述在 Marklogic DB 上设置 ODBC 服务器:https://docs.marklogic.com/guide/admin/odbc (请记住 select 在此步骤中使用正确的数据库,对于此示例,将 Auth 类型更改为 Basic)
- 第 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();
}
注:
- 上面显示的代码只是为了显示连接的可能性,而不是工业化版本。因此应该在使用时重构 根据编码准则,例如删除硬编码和使用绑定查询等
- 端口号是用于 ODBC 服务器设置的端口号 Marklogic.
希望对您有所帮助:-)
可能最简单的方法是在连接条件的右侧传入一个字符串序列:
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