jTDS JDBC驱动程序:getNString()抛出错误

我正在使用jtDS JDBC驱动程序,当我调用ResultSet.getNString(index); 我得到以下exception:

 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.(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()函数获得VarCharNVarChar

编辑:

相关的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的function列表确实说它支持NVARCHAR,NTEXT等。但目前我只看到问题。 我究竟做错了什么?

编辑2

问题1已解决..我通过SSMS将一些中文字符直接插入到数据库中,当我使用getString(index) ,它工作正常。 所以似乎jTDS对我猜的所有文本类型使用getString。 奇怪的是它没有为getNString(index)函数抛出某种不支持的exception。

所以,现在我们留下了如何将unicode数据插入NVARCHAR列的问题。 当然有人有过这方面的经验吗?

编辑3

我改变了我的代码,在每个方法中使用预处理语句,而不是尝试使用批处理并使用setInt,setString等方法。 但是,我仍然遇到同样的问题…如果我使用setString()进行unicode,它会插入??? 进入我的数据库。 如果我使用setNString()然后我得到了同样的错误,当我在做getNString时,我在这篇文章的顶部收到了…这是疯了……如果它实际上不支持unicode,那么这个驱动程序怎么会变得如此受欢迎?? 我在这里想念的是什么? 该网站确实说它支持NVARCHAR等。所以,为了使这项工作,我需要做的是什么疯狂不直观的事情?

getNString随Java 1.6 / JDBC 4.0一起添加。 看起来你的司机太老了。

你的主键是什么类型的? 我遇到了与你所描述的问题完全相同的问题,那就是:我可以使用经典的getString()方法检索存储为NVARCHAR的数据但是更新不起作用,即使将sendStringParametersAsUnicode选项设置为true …直到我更改从NVARCHAR返回VARCHAR的主键。 现在它适合我。 更新实际上没有产生任何错误,只是看起来主键无法找到,因此没有发生任何事情……仍然,我希望能够在某些字段中使用unicode存储而无需将sendStringParametersAsUnicode选项设置为true ,但是我我认为这是不可能的,除非可能通过键入有关列作为byte []而不是NVARCHAR并使用setBytes()方法设置它们(如此处所建议的那样)