【发布时间】:2012-07-04 22:36:28
【问题描述】:
我正在使用 java java.sql.* 从 SQLite DB 进行查询。我发现了一个问题,我将 sqlString 编写为:
SELECT n.Name as Name,
c.Value as Value0,
d.Value as Value1
FROM (Table1 c inner join Table2 n on c.NameID = n.ID),
Table3 d
WHERE c.RunID = 1
and d.RunID = 2
and c.NameID = d.NameID
语句stmt.executeQuery(sqlQuery) 抛出以下异常:
java.sql.SQLException: no such column: n.Name
at org.sqlite.DB.throwex(DB.java:288)
at org.sqlite.NativeDB.prepare(Native Method)
at org.sqlite.DB.prepare(DB.java:114)
at org.sqlite.Stmt.executeQuery(Stmt.java:89).............
Name 已经是 Table2 表的一部分。同样的语句在 SQLite 命令提示符下工作正常。但是当我删除左括号并尝试从java执行时,没有问题。知道为什么会这样吗?
【问题讨论】:
-
您使用什么应用程序“直接”执行 SQL?用户应用程序是否有可能在将输入正确发送到数据库服务器之前对其进行一些翻译?如果数据库根据发送它的系统对完全相同的输入做出不同的响应,我会感到惊讶。
-
如前所述,我直接从 java 代码访问 sqlite db。而且java代码中只有select语句。没有插入/更新。
-
我猜你正在使用 sqlite 命令外壳。你确定你用的是同一个版本? sqlite 库通常编译到命令 shell 中,因此不能保证它与您在 java 程序中使用的相同。例如,对于 3.6.6 版本,我看到的错误消息与您在 Java 中看到的相同,而对于 SQLite 版本 3.7.13,我看不到任何错误消息。因此,这种行为在过去发生了变化。