2016-04-06 17 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で私は、クエリのユーザーの入力値を渡したいと思います。これは、int型と文字列などの文で動作しますが、ない:

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)にキャストしようとすることができます。私はパラメータをキャストすることがSQL Serverによってサポートされていることを100%確信していません。 –

+0

お返事ありがとうございます。あなたの答えは正しいです。しかし、私は自分のJavaコードで間違いを発見し、それもキャストなしで動作します。 –

答えて

0

フィールドをvarchar:cast(AnyInt as varchar)にキャストすることができます。それがリテラルとして機能する理由は、SQL Serverがintとstringの比較であることを知っていて、intを自動的に文字列に変換するためです。ただし、パラメータを使用する場合、パラメータはcolumn:intと同じ型であるため、値%<somenumber>%は有効な値ではありません(例外はありませんが、驚いています)。

もう1つのオプションは、パラメータをキャストすることです(cast(? as varchar))。私はパラメータをキャストすることがSQL Serverによってサポートされていることを100%確信していません。

関連する問題