我使用JTDS JDBC驅動程序,當我打電話ResultSet.getNString(index);
我得到以下異常:JTDS JDBC驅動程序:getNString()拋出錯誤
run:
Exception in thread "main" java.lang.AbstractMethodError: net.sourceforge.jtds.jdbc.JtdsResultSet.getNString(I)Ljava/lang/String;
at javasql.ProductsController.PrePopulate(ProductsController.java:51)
at javasql.ProductsController.<init>(ProductsController.java:37)
at javasql.Program.main(Program.java:25)
Java Result: 1
BUILD SUCCESSFUL (total time: 6 seconds)
當我使用getString(index)
它工作正常..它是唯一與getNString()
我有問題,MSSQL表中的列被定義爲NVarChar
。那麼,是什麼給了? jtDS不支持getNString()
嗎?也許它通過相同的getString()
函數獲得VarChar
和NVarChar
?
編輯:
相關的unicode問題..我可以看到,嘗試使用Unicode插入要麼不起作用。我列定義爲nvarchar(255)
,但以下INSERT語句不起作用:
private final String INSERT_FORMAT = "INSERT INTO Products (Name, Price, QuantityInStock) VALUES (N'%s', %s, %s)";
public void Insert(Product p) {
products.add(p);
try {
statement.addBatch(String.format(INSERT_FORMAT, p.getName(), p.getPrice(), p.getQuantityInStock()));
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
public void SaveChanges() {
try {
statement.executeBatch();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
RefreshData();
}
中的Unicode字符,我輸入顯示爲數據庫中的問號。這通常發生在您忘記在插入語句中將N添加到上述參數中時。但是在這裏您可以看到我明確指定了它。 JtDS的功能列表確實說它支持NVARCHAR,NTEXT等。但目前我只看到問題。我究竟做錯了什麼?
EDIT 2
問題1解決了。我直接插入一些中國字符轉換成通過SSMS的數據庫,當我用getString(index)
,它工作得很好。所以看來jTDS對我猜的所有文本類型都使用getString。奇怪,那麼它不會爲getNString(index)
函數拋出某種不受支持的異常。
因此,現在我們留下了如何將Unicode數據插入NVARCHAR列的問題。這裏肯定有人有過這方面的經驗?
編輯3
我改變了我的代碼以使用準備好的聲明中的每個方法,而不是試圖用一個批次和使用的SETINT,了setString等方法。但是,我仍然有同樣的問題...如果我使用unicode的setString(),它插入???進入我的分貝。如果我使用setNString(),那麼當我在執行getNString時,我收到了我在本文頂部收到的同樣的錯誤...這是瘋了...如果它實際上不支持unicode,該驅動程序如何變得如此受歡迎??我在這裏錯過了什麼?該網站確實說它支持NVARCHAR等。那麼,爲了使這項工作我需要做什麼瘋狂的不直觀的事情?
我希望[這裏](http://stackoverflow.com/questions/10965589/unicode-data-type-in-sql)已經有人試圖與您的問題相關 – gks
@Stranger ...不是我的問題..並沒有真正相關。在那個線程中,OP不知道關於NVARCHAR列的任何信息等。我非常瞭解它,實際上使用的是NVARCHAR列。我非常熟悉SQL,並且一直在編寫基於SQL的應用程序多年..我遇到的問題是與jTDS驅動程序..它似乎不起作用,至少不是人們所期望的方式。 – Matt