Java准备了一个带整数的语句

时间:2016-04-06 12:49:14

标签: java sql-server jdbc

我的问题,关于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和类似语句,但不适用于int:

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();

但是,如果我在我的数据库程序中键入查询,它工作正常,他正在找到结果。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

您可以将字段转换为varchar:cast(AnyInt as varchar)。它作为文字工作的原因是SQL Server知道它是int和string之间的比较,并会自动将int强制转换为字符串。但是,当您使用参数时,参数的类型与列相同:int,因此值%<somenumber>%不是有效值(尽管我很惊讶您没有获得异常)。

另一种选择可能是强制转换参数:cast(? as varchar)。我不是100%确定SQL Server支持转换参数。

相关问题