2016-04-06 40 views
0

我的問題,有關準備語句在java中:java編寫類似語句的整數

SELECT TrackingId FROM table where TrackingId = 5735053 

TrackingId是數據庫中的一個整數列。我改變查詢:

SELECT TrackingId FROM table where TrackingId = '5735053' 

它工作正常,因爲他將其自動轉換它。此查詢同樣如下:

SELECT TrackingId FROM table where TrackingId LIKE '%5735%' 

這工作正常,數據庫正在查找結果。在Java中,我想將用戶的輸入值傳遞給查詢。它的工作原理與字符串和類似聲明,但不與詮釋:

String query = "SELECT AnyString FROM table where AnyString like ?"; 

connectDatabase(); 

pstmt = connection.prepareStatement(query); 
pstmt.setString(1, "%"+input+"%"); 
result = pstmt.executeQuery(); 

現在我想通過這個聲明整數關口,我已經嘗試了許多事情,但始終爲0的結果。所以這是行不通的:

String query = "SELECT AnyInt FROM table where AnyInt like ?"; 

connectDatabase(); 

pstmt = connection.prepareStatement(query); 
pstmt.setString(1, "%"+input+"%"); 
result = pstmt.executeQuery(); 

但是,如果我在我的數據庫程序中鍵入查詢它工作正常,他正在查找結果。有人可以幫我在這裏嗎?

+0

您是否調試瞭解'input'的值是什麼?這對我來說似乎是正確的。 –

+0

您可以嘗試將字段強制轉換爲varchar:'cast(AnyInt as varchar)'或參數:'cast(?as varchar)'。我不是100%肯定的是,SQL Server支持該參數。 –

+0

謝謝你的回覆。你的回答是正確的。但是我在我的java代碼中發現了一個錯誤,它在沒有投射的情況下也可以工作。 –

回答

0

您可以將該字段強制轉換爲varchar:cast(AnyInt as varchar)。它作爲一個文字工作的原因是,然後SQL Server知道它是一個int和字符串之間的比較,並會自動將int強制爲字符串。但是,當您使用參數時,參數與列的類型相同:int,因此值%<somenumber>%不是有效值(儘管我很驚訝您沒有發生異常)。

另一個選項可能是投射參數:cast(? as varchar)。我不是100%肯定的是,SQL Server支持該參數。