Java 如何使用 Spring JDBCTemplate 将 Blob 数据读入字符串对象

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38901830/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 20:43:43  来源:igfitidea点击:

How to read Blob data into String Object using Spring JDBCTemplate

javaspringspring-bootspring-jdbcjdbctemplate

提问by Punter Vicky

I am trying to use Spring JDBCTemplate to read blob data from a table.

我正在尝试使用 Spring JDBCTemplate 从表中读取 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
}

How can I read blob into a Java String object?

如何将 blob 读入 Java String 对象?

采纳答案by Punter Vicky

This seemed to work fine -

这似乎工作正常 -

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;
            }});

回答by Aditya

You can try retrieving the blob from database as below.

您可以尝试从数据库中检索 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();

回答by AGan

Another approach is by using java.sql.ResultSet getBytes() to convert BLOB column to String object,

另一种方法是使用 java.sql.ResultSet getBytes() 将 BLOB 列转换为 String 对象,

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;
        }
});

回答by rustyx

Java 8+syntax:

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;
    }
);

Or if you query only a BLOB:

或者,如果您只查询一个 BLOB:

List<byte[]> b = jdbc.query("SELECT y FROM ...", (rs, n) -> rs.getBytes(1));