我正在使用 jtDS JDBC 驱动程序,当我调用时ResultSet.getNString(index);
出现以下异常:
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()
吗?也许它通过相同的功能获得VarChar
两者?NVarChar
getString()
编辑:
相关的 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 等。但目前我只看到问题。我究竟做错了什么?
编辑 2
问题1已解决..我通过SSMS将一些汉字直接插入数据库,当我使用时getString(index)
,它工作正常。所以我猜jTDS似乎对所有文本类型都使用了getString。getNString(index)
奇怪的是,它不会为函数抛出某种不受支持的异常。
所以,现在我们剩下的问题是如何将 unicode 数据插入NVARCHAR列。这里肯定有人有过这方面的经验吗?
编辑 3
我将代码更改为在每个方法中使用准备好的语句,而不是尝试使用批处理并使用 setInt、setString 等方法。但是,我仍然遇到同样的问题......如果我将 setString() 用于 unicode,它会插入 ??? 进入我的数据库。如果我使用 setNString(),那么我会收到与我在执行 getNString 时在这篇文章顶部收到的错误相同的错误......这太疯狂了......如果这个驱动程序实际上不支持 unicode,它怎么会变得如此受欢迎?? 我在这里想念什么?该网站确实说它支持 NVARCHAR 等。所以为了使这项工作,我需要做什么疯狂的不直观的事情???