我使用java java.sql。*從SQLite DB查詢。我發現了一個starnge問題,即我寫的SqlString爲:Jave SQL executeQuery爲有效的sql語句拋出錯誤
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
已經是表2表的一部分。 SQLite命令提示符下的相同語句正常工作。但是,當我刪除了開放的括號並嘗試從java執行時,沒有任何問題。任何想法爲什麼發生這種情況?
您正在使用什麼應用程序執行的SQL「直接」?在將用戶應用程序發送到數據庫服務器之前,是否有機會對輸入進行一些翻譯?如果數據庫對完全相同的輸入有不同的響應,取決於系統發送的數據,我會感到驚訝。 –
我正如前面所述直接從java代碼訪問sqlite數據庫。在java代碼中只有選擇的語句。沒有插入/更新。 – tor
我想你正在使用sqlite命令shell。你確定,你正在使用相同的版本? sqlite庫通常編譯到命令shell中,所以不能保證,它和你在java程序中使用的一樣。例如,在版本3.6.6中,我看到了與在Java中看到的相同的錯誤消息,並且使用SQLite 3.7.13版,我看不到錯誤消息。所以,這種行爲在過去已經發生了變化。 – Stefan