有人能解释一下我如何使用Jackess来实现以下SQL查询的等效功能吗?
SELECT name FROM table WHERE id = '1'
SELECT name FROM table INNER JOIN table ON table.id = table2.id
关于:您的第一个查询(SELECT…FROM tableName WHERE…)
在最简单的形式中,您可以在Jackess主页的"示例代码"下使用"搜索具有特定列值的行"示例,即
Table table = DatabaseBuilder.open(new File("my.mdb")).getTable("MyTable");
Row row = CursorBuilder.findRow(table, Collections.singletonMap("a", "foo"));
if(row != null) {
System.out.println("Found row where 'a' == 'foo': " + row);
} else {
System.out.println("Could not find row where 'a' == 'foo'");
}
要在多个匹配行中循环,您可以执行类似的操作
Table table = DatabaseBuilder.open(new File("my.mdb")).getTable("MyTable");
Cursor cursor = CursorBuilder.createCursor(table);
while (cursor.findNextRow(Collections.singletonMap("a", "foo"))) {
Row row = cursor.getCurrentRow();
System.out.println(String.format(
"a='%s', SomeFieldName='%s'.",
row.get("a"),
row.get("SomeFieldName")));
}
或者,正如@jtahlborn在下面的评论中所建议的,
Table table = DatabaseBuilder.open(new File("my.mdb")).getTable("MyTable");
Cursor cursor = CursorBuilder.createCursor(table);
for (Row row : cursor.newIterable().addMatchPattern("a", "foo")) {
System.out.println(String.format(
"a='%s', SomeFieldName='%s'.",
row.get("a"),
row.get("SomeFieldName")));
}
Re:您的第二个查询(SELECT…FROM table1 INNER JOIN table2 ON…)
您可以使用一个for
或while
循环(与上面类似)来迭代一个表中的相关行,并使用内部for
或while
循环来迭代另一个(相关)表中的关联行。如果这两个表在Access中有一个现有的"关系"(也称为"外键约束"),则Jackess有一个Joiner类,这可能会有所帮助,在这里进行讨论。
如果您需要进一步的帮助,您将需要尝试为自己编写一些代码,然后提出一个新问题,显示您试图使用的代码以及您遇到的特定问题。