2014-11-22 101 views
0

我對MYSQL非常熟悉。現在,在IBM SQL DB(DB2)上嘗試一個查詢: 「select HOMENAME =」+ password +「';選擇查詢DB2-SQL失敗

這是我運行查詢時得到的錯誤。

發生錯誤[IBM] [CLI驅動程序] [DB2/LINUXX8664] SQL0206N「USERNAME」在使用它的上下文中無效。 SQLSTATE = 42703

我重視我的表怎麼看起來截圖:DB Screenshot

+0

您可能需要檢查名稱。它應該是顯示名稱。 – zawhtut 2014-11-22 03:42:22

+0

謝謝指出。我正在用「displayname」運行我的查詢,在這裏寫錯了。任何想法爲什麼錯誤? – JavascriptL 2014-11-22 03:47:55

+0

如何使用表別名?即使這個看起來不錯。沒有使用模式名稱怎麼樣。我以前從不使用bluemix,因此我不太瞭解如何在bluemix中運行查詢。 – zawhtut 2014-11-22 03:51:58

回答

3

您的查詢失敗,因爲DB2預計所有數據庫對象默認要大寫。非常如此,它會在執行前自動將您的查詢中的小寫字母名稱轉換爲大寫字母。

由於您的列名是小寫字母,因此此查詢失敗。

我的建議是將您的列名轉換爲大寫字母,因爲從長遠來看,這將爲您節省很多痛苦。

但是,只需在查詢中用雙引號包裝列名,DB2將保留正確的大小寫,並且查詢應該可以工作。

我相信這將工作: SELECT "displayname" FROM HOMEBASEDAPP.LOGINDB WHERE \"username\" = '" + username +"' AND \"password\" = '" + password +"';"

注:此處查詢是非常不安全的,是開放的除其他事項外SQL注入攻擊。希望你打算在你的應用中使用一個驅動程序,這將允許你「準備」你的查詢並提供簡單的傳遞值作爲參數。

+1

錯誤。一般來說,SQL不區分大小寫(作爲標準的一部分),除非您在創建對象時明確將對象名設置爲區分大小寫。所以這可能會解決這個問題,但這只是因爲安裝首先被搞糟。 – 2014-11-24 13:42:00

+0

你錯了。 DB2默認情況下區分大小寫。此外,如果在特定情況下創建對象,則無法在查詢中分隔對象名稱將導致查詢失敗。我的回答被接受了,所以它顯然是準確的。 – 2014-11-24 15:17:22

+0

沒有。在列中搜索數據_contained_區分大小寫。對象名稱在查詢時不區分大小寫([這是由於它在創建過程中將所有內容都轉換爲大寫](http://bytes.com/topic/db2/answers/473979-mixed-case-table-column-names) )。除非在創建過程中通過轉義來限定對象名稱,否則在這種情況下,您必須匹配您提供的任何內容(這通常是一種痛苦,因此建議不要這麼做)。哦,你忘了逃避''displayname「的引號......' – 2014-11-24 22:04:51

0

你需要修改你的sql腳本,否則在發現第一次出現雙引號時,db2會把它當作終止字符,我的意思是說查詢將被執行到下面,這樣你會得到錯誤:

http://www.justskins.com/forums/insert-with-double-quote-148522.html

DB2

你需要照顧雙引號的全SQL查詢的解析,下面是詳細的樣本參考鏈接「從HOMEBASEDAPP.LOGINDB其中username =「選擇顯示名稱」

+0

這完全取決於他如何運行該聲明。如果他使用的是Java,那麼他給出的表單是有效的,以及你連接字符串的方式(......你不應該這樣做,但這不是問題)。 – 2014-11-24 13:49:50