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

Mat*_*att 6 java jtds jdbc

我正在使用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)
Run Code Online (Sandbox Code Playgroud)

当我使用getString(index)它工作正常..它只是getNString()因为我有一个问题,我的MSSQL表中的列被定义为NVarChar.那么,是什么给出的?jtDS不支持getNString()吗?也许它得到了两个VarCharNVarChar通过相同的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();
    }
Run Code Online (Sandbox Code Playgroud)

我输入的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等.所以,为了使这项工作,我需要做的是什么疯狂不直观的事情?

Phi*_*all 6

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