我尝试在' VIEW'中尝试执行如下所述的简单查询。我的MSSQL数据库。尝试2天后没有成功。所以我转向SO。
PreparedStatement preparedStatement = connection.prepareStatement(
"SELECT * FROM Vw_Transactions WHERE Cust_No=? ");
preparedStatement.setString(1, "1234");
ResultSet resultSet = preparedStatement.executeQuery();
问题是我在查询后没有得到任何回复。甚至没有错误。甚至在等待很长时间之后,例如3mins。在等待最多5分钟后,我得到了一些结果。但这没用。我很想知道为什么在我做一些愚蠢的事情之前,像查询的半消毒和字符串concantenate参数,作为最后的手段。
我能看到的唯一最后一个日志是:
> SQLServerPreparedStatement:3: calling sp_prepexec: PreparedHandle:0, SQL:SELECT * FROM Vw_Transactions WHERE Cust_No=@P0
注意:我已经提到this问题,而我的不是重复的情况。我已经确定我没有这些错误。
答案 0 :(得分:2)
根据Cust_No
的数据类型,sqljdbc驱动程序可能会以意外格式发送字符串。
这将强制在SQL Server中进行数据转换,使得所有索引在该表/视图上无效。
由于您的Cust_No
在SQL Server中的类型为char
,因此在这种情况下这将是一个字符集转换。
正如http://msdn.microsoft.com/en-us/library/ms378988(v=sql.110).aspx所指出的那样,默认情况下,字符串参数会以Unicode(= nvarchar
)的形式发送,从而导致您的查询对所有{char
转换为nvarchar
次转换1}}。
尝试将Cust_No
添加到您的连接字符串中以禁用此功能。