java - SQLite 无法通过 JDBC 和 jOOQ 在 SELECT 中找到现有列

标签 java sql sqlite jdbc jooq

我在使用 SQLite 和 JDBC 时遇到一些奇怪的结果(实际上是通过 JOOQ,但可以通过 JDBC 手动执行查询字符串来重现此问题)。我的数据库由三个表组成,包括多对多和一对多关系。我尝试选择“主”表的所有值,并将所有需要的值从关系表中连接出来:

SELECT location.name, 
       world.world, 
       player.player 
FROM   location 
       JOIN world 
         ON location."world-id" = world."world-id" 
       LEFT OUTER JOIN (location2player 
                         JOIN player 
                           ON location2player."player-id" = player."player-id") 
                    ON location."location-id" = location2player."location-id" 

在 JDBC 中此查询失败:

java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (no such column: player.player)

当我在外部 SQLite 编辑器(例如适用于 Firefox 的 SQLite Manager)中执行查询时,它会按预期工作。

我使用sqlite-jdbc-3.7.2,我无法更改它。作为引用,JOOQ 查询为:

create.select(LOCATION.NAME,WORLD.WORLD_,PLAYER.PLAYER_)
            .from(LOCATION
                .join(WORLD)
                    .on(LOCATION.WORLD_ID.eq(WORLD.WORLD_ID)
                )
                .leftOuterJoin(LOCATION2PLAYER
                    .join(PLAYER)
                        .onKey()
                    )
                    .on(LOCATION.LOCATION_ID.eq(LOCATION2PLAYER.LOCATION_ID)
                )
            .fetch()

为什么在 JDBC 中此查询失败以及我应该如何修复它?

最佳答案

虽然我认为您编写了有效的 ANSI SQL,但 SQLite 对您的语句的解释很可能略有不同。但您实际上并不需要像您那样进行嵌套连接。试试这个安装:

SELECT location.name, 
       world.world, 
       player.player 
FROM   location 
       JOIN world 
         ON location."world-id" = world."world-id" 
       LEFT OUTER JOIN location2player 
         ON location."location-id" = location2player."location-id" 
       LEFT OUTER JOIN player 
         ON location2player."player-id" = player."player-id"

关于java - SQLite 无法通过 JDBC 和 jOOQ 在 SELECT 中找到现有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964972/

相关文章:

mysql - 这个 "no data"警告来自哪里? (光标循环)

c# - 在 C# 中的类构造函数中调用异步方法

java - 如何查询用户输入?

java - 编辑文本完成后软键盘再次打开

java - 关于用于压缩文件的免费库的建议

sql - Linux 进程事件

MySQL - 如何在两个 hasMany 关联的查询中获取 hasMany 关联的不同行的总和?

java - 如何在 java 中打印 zip 文件的压缩速度?

.net - 我们应该对数据库进行反规范化以提高性能吗?

iphone - 将大型 XML 文件转换为 SQLite 文件的最快方法是什么?