Jackcess等价于简单的SQL SELECT语句

时间:2014-04-17 09:13:00

标签: java ms-access select join jackcess

有人可以解释我如何使用Jackcess来实现以下SQL查询的等价物吗?

SELECT name FROM table WHERE id = '1'

SELECT name FROM table INNER JOIN table ON table.id = table2.id

1 个答案:

答案 0 :(得分:3)

Re:您的第一个查询(SELECT ... FROM tableName WHERE ...)

在最简单的形式中,您可以使用"搜索具有特定列值的行#34;示例代码"示例代码"在Jackcess主页上here,即

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 ...)

您可以使用一个forwhile循环(与上面类似)迭代一个表中的相关行,并使用内部forwhile循环迭代另一个(相关)表中的相关行。如果这两个表有一个"关系"在Access中(a.k.a。"外键约束")Jackcess有一个Joiner类可能有帮助,讨论here

<小时/> 如果您需要进一步的帮助,则需要尝试为自己编写一些代码,然后ask a new question显示您尝试使用的代码以及您拥有的特定问题用它。