通过xml配置来实现数据库的批量修改一

需求来源

近期由于项目的图片服务器迁移导致大量写死在数据库中图片路径需要修改。

实现思路

通过百度了解到可以通过mysql的REPLACE函数来进行局部替换数据内容,类似这样的语句:
"UPDATE "+tableName+" SET "+column+" = REPLACE ( "+column + ",'"+oldValue+"','" +newValue+"')"

版本演化一

我们了解基本实现思路,那么进行简单的数据替换就没问题了。比如本来的数据是这样http://www.oldImage.com/upload/image/1.jpg 需要改成http://www.newImage.com/upload/image/1.jpg,你应该知道如何实现了吗?好了,我们开始慢慢实现我们的小工具。首先,我们把基础设施搭建好,定义好SQLUtils类:

public class SQLUtils {
    /**
     * 数据源
     */
    private final DruidDataSource ds;
    /**
     * 表和列集合
     */
    private Map<String, List<String>> table_column;
    /**
     * 日志工具类
     */
    private Logger log = LoggerFactory.getLogger(SQLUtils.class);

    /**
     * 初始化数据源
     *
     * @param db       数据库
     * @param username 用户名
     * @param password 密码
     */
    public SQLUtils(String db, String username, String password) {
        ds = new DruidDataSource();
        ds.setUrl(db);
        ds.setUsername(username);
        ds.setPassword(password);
        initTableAndColumn(true);
    }
}

然后我们再来定义一个替换数据的方法:

/**
     * 部分替换数据
     * @param tableName
     *      表名
     * @param column
     *      列名
     * @param oldValue
     *      旧值
     * @param newValue
     *      新值
     */
    public void update(String tableName,String column, String oldValue, String newValue) {
        Connection conn = null;
        try {
            conn = ds.getConnection();
            // 拼接sql
            String sql = "UPDATE " + tableName + " SET " + column + " = REPLACE ( " + column + ",'" + oldValue + "','" + newValue + "')";
            // 日志输出
            log.info("sql:{}", sql);
            int count = SqlExecutor.execute(conn, sql);
            log.info("影响行数:{}", count);
        } catch (SQLException e) {
            log.error(e.getMessage());
        } finally {
            DbUtil.close(conn);
        }
    }

接着来看看我们的入口函数:

    /**
     * 执行器
     *
     * @param args
     */
    public static void main(String[] args) {

        String db = "jdbc:mysql:///test";                                       // 数据源
        String username = "root";                                               // 用户名
        String password = "root";                                               // 密码
        String tableName = "ad";                                                // 表名
        String column = "path";                                                 // 列名
        String oldValue = "oldImage.com";                                       // 旧值
        String newValue = "newImage.com";                                       // 新值
        SQLUtils sqlUtils = new SQLUtils(db, username, password);
        sqlUtils.batchExecute(tableName,column,oldValue, newValue);

    }

通过以上代码可以实现单条数据的修改。

版本演化二猜想

但是,如果数据库中存在大量这样的数据,比如说一个电商网站的商品图片地址,这样一条一条地修改数据恐怕你会疯掉,如果图片服务器再次迁移恐怕你要跑路了。那么我们如何批量修改呢?今天现在写到这里。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值