如何使用 Spring JDBCTemplate 将 Blob 数据读入字符串对象
How to read Blob data into String Object using Spring JDBCTemplate
我正在尝试使用 Spring JDBCTemplate 从 table.
中读取 blob 数据
List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
for(Map<String, Object> row:rows){
row.get("OPERATION_NAME");
row.get("REQUEST_MESSAGE"); // this is blob
}
如何将 blob 读入 Java 字符串对象?
您可以尝试从数据库中检索 blob,如下所示。
String retrieveBlobAsString = null;
Blob b = row.get("REQUEST_MESSAGE");//cast with (Blob) if required. Blob from resultSet as rs.getBlob(index).
InputStream bis = b.getBinaryStream();
ObjectInputStream ois = new ObjectInputStream(bis);
retrieveBlobAsString = (String) ois.readObject();
这似乎工作正常 -
LobHandler lobHandler = new DefaultLobHandler();
List<FrontendData> frontEndDataList = jdbcTemplate.query(getResponseQuery(sessionId), new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
FrontendData frontEndData = new FrontendData();
String operationName = rs.getString("OPERATION_NAME");
frontEndData.setApiName(operationName);
byte[] requestData = lobHandler.getBlobAsBytes(rs,"RESPONSE_MESSAGE");
frontEndData.setResponse(new String(requestData));
return frontEndData;
}});
另一种方法是使用 java.sql.ResultSet getBytes() 将 BLOB 列转换为字符串对象,
List<ModelClass> hulaList = jdbcTemplate.query(sql,
new RowMapper<ModelClass>() {
@Override
public ModelClass mapRow(ResultSet rs, int rowNum) throws SQLException {
ModelClass model = new ModelClass();
model.setOperationName(rs.getString("OPERATION_NAME"));
byte[] byteArr = rs.getBytes("REQUEST_MESSAGE");
model.setRequestMessage(new String(byteArr));
return model;
}
});
Java 8+ 语法:
List<MyObject> results = jdbcTemplate.query(
"SELECT x,y FROM ... ",
(rs, n) -> {
MyObject o = new MyObject();
o.setX(rs.getString("x"));
o.setY(rs.getBytes("y")); // <-- a BLOB
return o;
}
);
或者如果您只查询 BLOB:
List<byte[]> b = jdbc.query("SELECT y FROM ...", (rs, n) -> rs.getBytes(1));
我正在尝试使用 Spring JDBCTemplate 从 table.
中读取 blob 数据List<Map<String, Object>> rows = jdbcTemplate.queryForList(sql);
for(Map<String, Object> row:rows){
row.get("OPERATION_NAME");
row.get("REQUEST_MESSAGE"); // this is blob
}
如何将 blob 读入 Java 字符串对象?
您可以尝试从数据库中检索 blob,如下所示。
String retrieveBlobAsString = null;
Blob b = row.get("REQUEST_MESSAGE");//cast with (Blob) if required. Blob from resultSet as rs.getBlob(index).
InputStream bis = b.getBinaryStream();
ObjectInputStream ois = new ObjectInputStream(bis);
retrieveBlobAsString = (String) ois.readObject();
这似乎工作正常 -
LobHandler lobHandler = new DefaultLobHandler();
List<FrontendData> frontEndDataList = jdbcTemplate.query(getResponseQuery(sessionId), new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
FrontendData frontEndData = new FrontendData();
String operationName = rs.getString("OPERATION_NAME");
frontEndData.setApiName(operationName);
byte[] requestData = lobHandler.getBlobAsBytes(rs,"RESPONSE_MESSAGE");
frontEndData.setResponse(new String(requestData));
return frontEndData;
}});
另一种方法是使用 java.sql.ResultSet getBytes() 将 BLOB 列转换为字符串对象,
List<ModelClass> hulaList = jdbcTemplate.query(sql,
new RowMapper<ModelClass>() {
@Override
public ModelClass mapRow(ResultSet rs, int rowNum) throws SQLException {
ModelClass model = new ModelClass();
model.setOperationName(rs.getString("OPERATION_NAME"));
byte[] byteArr = rs.getBytes("REQUEST_MESSAGE");
model.setRequestMessage(new String(byteArr));
return model;
}
});
Java 8+ 语法:
List<MyObject> results = jdbcTemplate.query(
"SELECT x,y FROM ... ",
(rs, n) -> {
MyObject o = new MyObject();
o.setX(rs.getString("x"));
o.setY(rs.getBytes("y")); // <-- a BLOB
return o;
}
);
或者如果您只查询 BLOB:
List<byte[]> b = jdbc.query("SELECT y FROM ...", (rs, n) -> rs.getBytes(1));