2012-10-12 96 views
3

我在使用JTDS从SQL Server 2005数据库中读取视图时遇到问题,并且发现解决方案时出现严重问题。(JTDS)java.sql.SQLException:将数据类型nvarchar转换为数字时出错

视图中的查询只选择了一切:

SELECT * FROM encounters_view WHERE patient_id = ? 

的异常被抛出在这条线:

rset = selectAllEncountersByPatientId.executeQuery(); 

堆栈跟踪如下:

java.sql.SQLException: Error converting data type nvarchar to numeric. 
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:372) 
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) 
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) 
    at net.sourceforge.jtds.jdbc.TdsCore.isDataInResultSet(TdsCore.java:796) 
    at net.sourceforge.jtds.jdbc.JtdsResultSet.<init>(JtdsResultSet.java:134) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:483) 
    at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.executeQuery(JtdsPreparedStatement.java:776) 
    at package_name.ClassName.method(Db_query_class.java:91) 
    at package_name.ClassName.main(Main_class.java:36) 

查看数据类型:

id (unique(numeric(16,0)),not null) 
provId (uniqueid(numeric(16,0)),not null) 
patId (uniqueid(numeric(16,0)),not null) 
mrn (varchar(20),not null) 
visitId (uniqueid(numeric(16,0)),not null) 
dttm (datetime, null) 
apptType (name(varchar(255)),null) 
apptStatus (name(varchar(255)),null) 
refProvId (uniqueid(numeric(16,0)),not null) 
pay (name(varchar(255)),not null) 
zip (char(10),not null) 

任何帮助将不胜感激。

+0

你可以发布你的SQL语句以及表定义吗? (列的数据类型很有用)。 –

+0

我添加了视图的数据类型。我可以在数据库中运行查询,但是当我尝试用它填充结果集时,它会炸弹。 – barrongineer

+0

您可以显示选择语句 –

回答

4

这很可能是因为您加入两列不同数据类型(一个nvarchar为其他数字)而引起的 - 您的nvarchar可能包含包含不会转换为十进制字符的数字(例如','或' 。')。

+0

我发现这是由查询参数中的特殊字符引起的。测试人员在ID前加上'!'。 – barrongineer

相关问题