Tôi đang sử dụng trình điều khiển jtds JDBC và khi tôi gọi ResultSet.getNString(index);
tôi nhận được ngoại lệ sau đây:jTDS JDBC driver: getNString() throws lỗi
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)
Khi tôi sử dụng getString(index)
nó hoạt động tốt .. nó chỉ với getNString()
rằng tôi đang gặp sự cố và cột trong bảng MSSQL của tôi được định nghĩa là NVarChar
. Vì vậy, những gì cho? Không jtDS không hỗ trợ getNString()
? Có thể nó có cả hai số VarChar
và NVarChar
thông qua cùng chức năng getString()
không?
EDIT:
vấn đề unicode liên quan .. Tôi có thể thấy rằng cố gắng sử dụng Unicode không làm việc cho chèn một trong hai. cột của tôi được định nghĩa là nvarchar(255)
nhưng các tuyên bố INSERT sau không làm việc:
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();
}
Các ký tự unicode mà tôi đầu vào hiển thị như dấu chấm hỏi trong cơ sở dữ liệu. Điều này thường xảy ra khi bạn quên thêm N vào tham số đã cho trong câu lệnh chèn .. nhưng tại đây bạn có thể thấy rằng tôi đã chỉ định rõ ràng nó. Danh sách tính năng của JtDS có nghĩa là nó hỗ trợ NVARCHAR, NTEXT, vv .. nhưng hiện tại tôi chỉ gặp vấn đề. Tôi đang làm gì sai?
EDIT 2
Issue 1 đã được giải quyết .. Tôi chèn một số ký tự Trung Quốc trực tiếp vào cơ sở dữ liệu thông qua SSMS và khi tôi sử dụng getString(index)
, nó làm việc tốt. Vì vậy, có vẻ như jTDS sử dụng getString cho tất cả các loại văn bản mà tôi đoán. Lạ sau đó nó không ném một loại ngoại lệ không được hỗ trợ cho hàm getNString(index)
.
Vì vậy, bây giờ chúng tôi đã để lại sự cố về cách chèn dữ liệu unicode vào cột NVARCHAR. Chắc chắn một người nào đó ở đây đã có kinh nghiệm với điều này?
EDIT 3
tôi đã thay đổi mã của tôi để sử dụng một tuyên bố chuẩn bị trong mỗi phương pháp thay vì cố gắng sử dụng một lô và sử dụng setInt, setString, vv phương pháp. Tuy nhiên, tôi vẫn còn có những vấn đề tương tự ... nếu tôi sử dụng setString() cho unicode, nó chèn ??? vào db của tôi. Nếu tôi sử dụng setNString() sau đó tôi nhận được cùng một lỗi mà tôi nhận được ở đầu bài viết này khi tôi đang làm getNString ... Đây là điên ... làm thế nào có thể trình điều khiển này trở nên phổ biến nếu nó không thực sự hỗ trợ unicode ?? Tôi đang thiếu gì ở đây? Các trang web không nói rằng nó hỗ trợ NVARCHAR, vv .. vì vậy những gì điên unintuitive điều là nó mà tôi cần phải làm để thực hiện công việc này?
Tôi hy vọng [ ở đây] (http://stackoverflow.com/questions/10965589/unicode-data-type-in-sql) đã có một số đã cố gắng liên quan đến vấn đề của bạn – gks
@Stranger ... không phải vấn đề của tôi .. và không thực sự liên quan. Trong chủ đề đó, OP không biết bất cứ điều gì về các cột NVARCHAR, vv Tôi biết nó rất tốt và trong thực tế, sử dụng một cột NVARCHAR. Tôi rất exprienced với SQL và đã được viết các ứng dụng dựa trên SQL trong nhiều năm .. vấn đề tôi đang có là với trình điều khiển jTDS .. nó dường như không hoạt động, ít nhất không phải là cách mong đợi. – Matt