2013-08-26 103 views
5

Chúng tôi có hai thiết lập giống hệt nhau về sản phẩm của chúng tôi ở phần cuối của chúng tôi. Một thiết lập đang hoạt động bình thường nhưng thiết lập khác đã gặp sự cố bên dưới.Java + ResultSet.getObject()

Chúng tôi đang bắn một truy vấn trên cơ sở dữ liệu và truy vấn như:

String query = select col1_name, col2_name, col3_name from table_1; 
PreparedStatement l_statement = null; 
Connection con = "<connection-string>"; 
l_statement = con.prepareStatement(query); 
Resultset l_rs = l_statement.executeQuery(); 

Bây giờ col1 ("column1") datatype là "SYS.XMLTYPE" mã để lấy cột dữ liệu là:

Object obj = null; 
obj = l_rs.getObject(1); 
String xmlStr = null; 
if(obj instanceof XMLTYPE){ 
    ... 
} lse if (obj instanceof XMLTYPE){ 
    ... 
} else if (obj instanceof java.sql.SQLXML){ 
    xmlStr = ((SQLXML)obj).getString(); 
} 

việc kiểm soát các chương trình đi vào cuối else if, tức là

xmlStr = ((SQLXML)obj).getString(); 

Bây giờ khi chúng tôi kiểm tra giá trị của xmlStr, nó chứa các ký tự rác như sau:

Ÿcž(too many junk characters.) 

Trên một thiết lập đoạn mã này hoạt động chính xác và ngược lại, chuỗi xml cung cấp các ký tự rác, lý do gì?

+3

Rõ ràng một điều gì đó khác :-) Bạn đã xác minh mã hóa DB, mã hóa máy chủ, v.v ...? –

+0

Bạn có thể cho chúng tôi thấy sự khác biệt của các thiết lập của bạn không? –

+0

nếu ** hai thiết lập giống nhau **, hãy thử trao đổi các máy (thiết lập bị lỗi trên máy đang hoạt động và ngược lại). _reason cho một gợi ý như vậy: kiểm tra xem cơ sở dữ liệu có bị hỏng không. –

Trả lời

0

Bạn có thể phải chỉ định mã hóa Chuỗi bạn đang mong đợi. Theo mặc định Windows và Linux có mã hóa mặc định khác nhau để chúng có thể không tương thích khi bạn marshall trên một nền tảng và unmarshall trên nền tảng khác. Lý tưởng nhất là mã hóa nên được quyết định sao cho mã hóa được sử dụng nhất quán giữa hai nền tảng.