【问题标题】:Jackcess equivalents for simple SQL SELECT statements简单 SQL SELECT 语句的 Jackcess 等价物
【发布时间】:2014-06-01 11:36:54
【问题描述】:

谁能解释一下我如何使用 Jackcess 来实现以下 SQL 查询的等价物?

SELECT name FROM table WHERE id = '1'

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

【问题讨论】:

  • 你考虑过使用UCanAccess吗?欲了解更多信息,请查看here。
  • 不幸的是,我只是在开发项目的一部分,我必须使用 jackcess,它不是我的选择

标签: java ms-access select join jackcess


【解决方案1】:

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

在其最简单的形式中,您可以使用 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")));
}

回复:您的第二个查询(SELECT ... FROM table1 INNER JOIN table2 ON ...)

您可以使用一个for 或while 循环(类似于上面)来遍历一个表中的相关行,并使用一个内部for 或while 循环来遍历表中的相关行其他(相关)表。如果这两个表在 Access 中有一个现有的“关系”(又名“外键约束”),Jackcess 有一个可能有帮助的Joiner 类,讨论了here。


如果您需要进一步的帮助,您需要尝试为自己编写一些代码,然后 ask a new question 显示您尝试使用的代码以及您遇到的特定问题 .

【讨论】:

  • 很抱歉,当代码到达你写的“while”条件没有进入时,跳过“while”块
  • @Shiroga 我已经更新了我的答案。 (在第二个示例中缺少Table table = ...。)
  • @Shiroga re:对您的答案的评论(已被删除)- Stack Overflow 是一个“问答”网站;它不鼓励长时间的讨论。这个想法是有人问一个特定问题,人们对该问题提供直接答案,答案会根据其质量吸引赞成/反对票,理想情况下,其中一个答案是accepted。不鼓励使用后续问题,因为它们会偏离原始问答交换的重点。 尝试编写一些代码,如果您仍然需要帮助,请创建一个新问题。
  • 注意,您可以使用 IterableBuilder 大大简化循环:for(Row row : cursor.newIterable().addMatchPattern("a", "foo")) {。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多