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 などのメソッドを使用しました。しかし、私はまだ同じ問題を抱えています... Unicode に setString() を使用すると、??? が挿入されます。私のデータベースに。setNString() を使用すると、この投稿の上部で getNString を実行していたときに受け取ったのと同じエラーが表示されます... これは正気ではありません... 実際に Unicode をサポートしていない場合、このドライバーがどうしてそんなに人気になるのでしょうか? ?? ここで何が欠けていますか?このサイトでは、NVARCHAR などをサポートしていると言っています。