JDBC模板:如何获取MySQL变量的值

vfwfrxfs  于 2022-10-31  发布在  Mysql
关注(0)|答案(2)|浏览(129)

我想获取MySQL变量的值(例如:max_allowed_packet)。这可能吗?如果可以,如何实现?
在SQL中,我可以执行SHOW VARIABLES LIKE 'max_allowed_packet';,但如何通过JDBCTemplate执行此操作?

sqxo8psd

sqxo8psd1#

这里有一个解决方案

public List<Variable> findAllVariables() {
    List<Variable> result = jdbcTemplate.query("SHOW GLOBAL VARIABLES", new VariableRowMapper());
    //about 630 variables
    return result;
}

变量类:

public class Variable {
    private String name;
    private String value;
    //getters and setters
}

变量行Map器类:

public class VariableRowMapper implements RowMapper<Variable> {
    @Override
    public Variable mapRow(ResultSet resultSet, int rowNum) throws SQLException {
        String name = resultSet.getString("Variable_Name");
        String value = resultSet.getString("Value");
        return new Variable(name, value);
    }
}

希望能有所帮助。

q3qa4bjr

q3qa4bjr2#

我对从数据库中获取max_allowed_packet变量特别感兴趣,下面的代码片段就可以做到这一点。

private int fetchMaxAllowedPacketsFromDB(JdbcTemplate jdbcTemplate) {
        final String sql = "SELECT @@GLOBAL.max_allowed_packet";
        Integer maxAllowedPacketsFromDB = jdbcTemplate.queryForObject(sql, Integer.class);
        log.info("@@GLOBAL.max_allowed_packet : {}", maxAllowedPacketsFromDB);
        return maxAllowedPacketsFromDB;
    }

1.您可以查看@Ali4j的答案,了解更通用/多变量的需求。
1.或者,如果您不需要RowMapper的额外工作,您可以重构上面的代码片段,将变量作为参数传入

相关问题