jTDS JDBC Driver: getNString() throws error
我正在使用 jtDS JDBC 驱动程序,当我调用
1 2 3 4 5 6 7 | 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) |
当我使用
编辑:
相关的 unicode 问题.. 我可以看到尝试使用 Unicode 也不能用于插入。我的列定义为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 等。但目前我只看到问题。我做错了什么?
编辑 2
问题1已解决。我通过SSMS将一些汉字直接插入数据库,当我使用
所以,现在我们剩下的问题是如何将 unicode 数据插入 NVARCHAR 列。这里肯定有人有过这方面的经验吗?
编辑 3
我将代码更改为在每个方法中使用准备好的语句,而不是尝试使用批处理并使用 setInt、setString 等方法。但是,我仍然遇到同样的问题......如果我将 setString() 用于 unicode,它会插入 ??胛业氖菘狻H绻沂褂?setNString(),那么我会收到与我在执行 getNString 时在这篇文章顶部收到的相同的错误......这太疯狂了......如果这个驱动程序实际上不支持 unicode,它怎么会变得如此受欢迎??我在这里想念什么?该网站确实说它支持 NVARCHAR 等。所以为了使这项工作,我需要做什么疯狂的不直观的事情???/p>>
<
你的主键是什么类型的?
我遇到了与您描述的完全相同的问题,即:我可以使用经典的 getString() 方法检索存储为 NVARCHAR 的数据,但更新不起作用,即使将 sendStringParametersAsUnicode 选项设置为 true ......直到我改变主键从 NVARCHAR 回到 VARCHAR。现在它对我有用。
更新实际上并没有产生任何错误,只是似乎找不到主键,因此什么也没发生......
尽管如此,我希望能够在不将 sendStringParametersAsUnicode 选项设置为 true 的情况下对某些字段使用 unicode 存储,但我的印象是这是不可能的,除非可能通过将相关列键入为 byte[] 而不是 NVARCHAR 并设置他们使用 setBytes() 方法(如此处建议/)