[英]Why is Hibernate throwing an invalid column exception? My query runs well in Oracle, but throws an exception in Java code
[英]Query runs on DB but throws exception in java
我在執行嵌套的sql查詢時遇到了一些麻煩。 它在TOAD(對於Oracle DB)上運行時工作正常,但是當我嘗試從我的java程序執行相同的查詢時,它給出了一個錯誤:ORA-00923:找不到FROM關鍵字:這是查詢:
Select *
from(select tb1.Number, tb1.Desc, tb1.Local, tb2.Division
from tb1
inner join tb2
on tb1.Number = tb2.Number
and Local in ('ENG_USA', 'ENG_CHINA', 'FR_FRENCH'))
where Number in ('7512','4706')
就像我提到的,它在Toad上執行正常,並且能夠檢索數據,但是相同的查詢會拋出ORA-00923異常。
rset = stmt.executeQuery(Select *
from(select tb1.Number, tb1.Desc, tb1.Local, tb2.Division
from tb1
inner join tb2
on tb1.Number = tb2.Number
and Local in ("+loc+"))
where Number in ("+s+")
引用回復
我和mysql有類似的問題。 我的問題是我在多行中分割查詢而不在兩行之間留下空格。 所以你的查詢應該是:
rset = stmt.executeQuery("Select * from(select tb1.Number, tb1.Desc, tb1.Local, tb2.Division from tb1 inner join tb2 on tb1.Number = tb2.Number and Local in ("+loc+")) where Number in ("+s+")"
PS:我想把它寫成評論,但出於某種原因,我不能在這個問題上。 抱歉!
首先,我沒有在Java代碼中看到開頭或結尾的雙引號。 由於你的Java代碼必須編譯才能足夠接收Oracle錯誤,我假設在SELECT
之前有一個雙引號,在最后的close paren之后有一個雙引號,然后是另一個匹配的父代匹配在executeQuery
上打開paren。 所以我假設你的實際代碼是這樣的
rset = stmt.executeQuery(
"Select *
from(select tb1.Number, tb1.Desc, tb1.Local, tb2.Division
from tb1
inner join tb2
on tb1.Number = tb2.Number
and Local in ("+loc+"))
where Number in ("+s+")");
您是否有動態構建SQL語句而不是使用綁定變量? 使用綁定變量更安全,因為您不必擔心SQL注入攻擊。 它更高效,因為您不是每次都強制數據庫硬解析查詢。 它可以避免引發和轉義中出現的各種錯誤。 在您的情況下,假設局部變量loc
沒有前導和尾隨單引號,您需要在查詢中包含那些
rset = stmt.executeQuery(
"Select *
from(select tb1.Number, tb1.Desc, tb1.Local, tb2.Division
from tb1
inner join tb2
on tb1.Number = tb2.Number
and Local in ('"+loc+"'))
where Number in ("+s+")");
如果您使用綁定變量並將loc
綁定到第一個綁定變量,另一方面,您不必擔心添加單引號(或轉義loc
任何單引號)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.