2016-04-06 2 views
0

Моя проблема, по поводу подготовленных заявлений в Java:Java подготовлен как заявление с целым числом

SELECT TrackingId FROM table where TrackingId = 5735053 

TrackingId представляет собой целое число столбцов в базе данных. Whe i меняет запрос на:

SELECT TrackingId FROM table where TrackingId = '5735053' 

он отлично работает, так как он автоматически преобразует его. То же самое касается этого запроса:

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

Это прекрасно работает, и база данных находят результаты. В java я хочу передать входное значение пользователя в запрос. Он работает с String, и тому подобным заявлением, но не с междунарами:

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

connectDatabase(); 

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

Теперь я хочу, чтобы пройти через Integer этого заявление, и я попробовал много вещей, но всегда 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 и string и автоматически принуждает int к string. Однако, когда вы используете параметр, параметр имеет тот же тип, что и столбец: int, поэтому значение %<somenumber>% не является допустимым значением (хотя я удивлен тем, что вы не получите исключения).

Другим вариантом может быть включение параметра: cast(? as varchar). Я не уверен, что 100% значение параметра поддерживается SQL Server.

Смежные вопросы