Tôi đang gặp sự cố khi đọc trường VARBINARY của MySQL dưới dạng Chuỗi sử dụng JdbcTemplate. Chúng tôi đang lưu trữ các từ viết tắt chuỗi ("ABC", "XYZ", "LMN" và các loại tương tự) làm VARBINARYs (không hỏi tôi tại sao). Kỳ lạ, đủ, khi tôi sử dụng các kết nối lớp/PreparedStatement tuyến đường, và đồng bằng cũ ResultSets vs SqlRowSet, tôi không có vấn đề đọc String. Đó là để nói,JdbcTemplate: truy cập trường MySQL VARBINARY dưới dạng Chuỗi
Mã này hoạt động:
String sql = "select MY_VARBINARY_FIELD from MY_TABLE where KEY1=? and KEY2=?";
PreparedStatement stmt = connectionDev.prepareStatement(sql);
prepStmt1.setInt(1, key1);
prepStmt1.setInt(2, key2);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String s = rs.getString("MY_VARBINARY_FIELD");
System.out.print(s + " ");
}
**Output:** AHI-1 DKFZp686J1653 FLJ14023 FLJ20069 JBTS3 ORF1 dJ71N10.1
Nhưng mã này không:
String sql = "select MY_VARBINARY_FIELD from MY_TABLE where KEY1=? and KEY2=?";
Object[] params = {key1, key2};
SqlRowSet rows = getJdbcTemplate().queryForRowSet(sql, params);
while (rows.next()) {
String s = rows.getString("MY_VARBINARY_FIELD");
System.out.print(s + " ");
}
**Output:** [[email protected] [[email protected] [[email protected] [[email protected] [[email protected] [[email protected] [[email protected]
Tại sao SqlRowSet và ResultSet tạo ra một đại diện chuỗi khác nhau cho các VARBINARY? Và làm thế nào tôi có thể có được "chính xác" đại diện bằng cách sử dụng JdbcTemplate/SqlRowSet?
Cảm ơn!
SOLUTION
Đánh dấu Rotteveel (dưới đây) đã trả lời câu hỏi. Tôi đã nhận nó để làm việc với điều này:
String sql = "select MY_VARBINARY from MY_TABLE where KEY=VALUE";
SqlRowSet rows = getJdbcTemplate().queryForRowSet(sql);
while (rows.next()) {
byte[] varbinary = (byte[]) rows.getObject("MY_VARBINARY");
System.out.println(new String(varbinary));
}
+1 vị trí tốt. Ngoài ra, có lẽ là một ý tưởng tốt để xác định mã hóa ký tự để tránh sự khác biệt nền tảng – artbristol
@artbristol Đúng, nhưng tôi nghi ngờ người lái xe cũng đang làm việc đó mà không có ký tự rõ ràng. –
+1 Điều này làm cho rất nhiều ý nghĩa và bạn có thể đúng. Tôi sẽ kiểm tra sau ngày hôm nay. – ktm5124