2012-10-12 123 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

相關問題