1. 程式人生 > >通過xml配置來實現資料庫的批量修改一

通過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);

    }

通過以上程式碼可以實現單條資料的修改。

版本演化二猜想

但是,如果資料庫中存在大量這樣的資料,比如說一個電商網站的商品圖片地址,這樣一條一條地修改資料恐怕你會瘋掉,如果圖片伺服器再次遷移恐怕你要跑路了。那麼我們如何批量修改呢?今天現在寫到這裡。。。。

相關推薦

通過xml配置實現資料庫批量修改

需求來源 近期由於專案的圖片伺服器遷移導致大量寫死在資料庫中圖片路徑需要修改。 實現思路 通過百度瞭解到可以通過mysql的REPLACE函式來進行區域性替換資料內容,類似這樣的語句: "UPDATE "+tableName+" SET

使用logback.xml配置實現日誌檔案輸出

轉自:http://sungang-1120.iteye.com/blog/2104296  Logback是由log4j創始人設計的又一個開源日誌元件。logback當前分成三個模組:logback-core,logback- classic和logback-access。logback-core是其它兩

Spring-通過xml配置檔案實現切面(AOP)

使用註解的方式實現AOP: 1、業務類 PersonService.java/* *@Author swxctx *@time 2016年9月22日 */ package com.sw.serv

Spring 通過XML配置檔案以及通過註解形式AOP 實現前置,環繞,異常通知,返回後通知,後通知

本節主要內容: 一、Spring 通過XML配置檔案形式來AOP 來實現前置,環繞,異常通知     1. Spring AOP  前置通知 XML配置使用案例     2. Spring AOP  環繞通知 XML配置使用案例     3. Spring AOP

Lunix下tomcat通過配置server.xml配置檔案實現執行非webapps目錄下的專案

1、首先普及一個觀點:tomcat對於webapps下的專案會自動部署,不需要配置server.xml,但對於非webapps目錄下的專案則需要手動配置server.xml檔案,例如在搭建nginx伺服器均衡負載時,往往不會把專案放在webapps目錄下。 2、serv

spring基於task標籤和通過xml配置實現任務的區別

spring3.x可以通過<task>標籤輕易的定義定時任務,而且不需要依賴第三方jar包如quartz等,這個是spring自己的實現,但不支援叢集,其cron表示式也不支援年。 我們可以簡單的通過以下配置: 匯入maven座標:<dependency&g

Spring mvc通過xml配置檔案方式實現簡單HelloWorld

實現Spring MVC有兩種不同的方式:基於XML配置檔案和基於註解。 這裡,我們使用XML檔案的方式來實現。 首先,我們需要在Eclipse或者是MyEclipse中新建一個web專案,並將Spr

Spring-通過xml配置實現AOP

1.定義切面類 如下函式,將beforeMethod應用到其他函式中。 package test; import org.aspectj.lang.JoinPoint; public class LoggingAspect { public void beforeM

Java通過匿名類實現回調函數

err sys 強制 代碼 表達式 形參 入參 對象 std 在C語言中,函數名可以當做函數指針傳遞給形參從而實現回調 void f1() { printf("f1()\n"); } void f2() { printf("f2()\n"); } void f3() {

用關鍵字interface定義接口,通過關鍵字implements實現接口

組織 多繼承 implement 列表 類型 協議 參數 發的 常量 【定義】Java中,能夠完成特定功能的,由若幹屬性和方法組織成的,相對獨立的屬性和方法的集合。 【用途】實現類的多繼承,以解決Java只能單繼承,不支持多繼承的問題。 【特點】 用關鍵字interface

gp 資料庫批量修改

語法說明 UPDATE [ ONLY ] table SET column = { expression | DEFAULT } [, ...] [ FROM fromlist ] [ WHERE condition ] 例子:

python 通過多執行緒實現Excel 批量更新商品價格

import openpyxl import threading wb = openpyxl.load_workbook('produceSales.xlsx') sheet = wb.active all_info = [] for row in sheet.rows: child

Spring-Kafka XML配置方法實現生產和消費

  Spring-Kafka XML配置方法實現生產和消費  1. 生產者配置xml Step1:producerProperties:設定生產者公產需要的配置 ; Step2:producerFactory:定義了生產者工廠構造方法

通過策略模式實現redis的單機版和叢集版的轉換

(1)首要介面JedisClient package com.wine.jedis; public interface JedisClient { String set(String key, String value); String get(String key); Boo

Spring_(3)通過xml配置bean+建立物件

先來看整體專案的結構 HelloWorld.java package com.spring.beans; public class HelloWorld { private String name; public void setName(String na

SpringBoot 入門之二:獲取Properties中的值,通過配置替代原SpringXML的配值和注入方式

•application.properties •application.yml person.last-name=\u674E\u56DB person.age=12 person.birth=2017/12/15 person.boss=false person.maps.k

自媒體是什麼?如何通過自媒體實現月入過萬?現實嗎

自媒體,意指為個人提供資訊生產,積累,共享,傳播內容兼具私密性和公開性的資訊傳播方式,指私人化,平民化,普泛化,自主化的傳播者,向不熱頂的大多數人群傳遞規範性或不規範性資訊的新媒體總稱。 自媒體平臺包括部落格,微博,微信,百度貼吧,各大官方自媒體平臺等。舉一個大

Spring 通過XML配置裝配Bean

使用XML裝配Bean需要定義對於的XML,需要引入對應的XML模式(XSD)檔案,這些檔案會定義配置Spring Bean的一些元素,簡單的配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.s

Spring Boot入門 (二) :無xml配置實現

無xml配置的實現 自Spring3.X 以後 spring 提供了很多的註解來代替XML檔案的配置,最核心的是下面兩個註解。 ::@Configuration:: 標註該類是配置類,類似於我們定義的applicationContext.xml ::@B

用Java+xml配置方式實現Spring資料事務(程式設計式事務)

一、用Java配置的方式 1、實體類: Role  public class Role { private int id; private String roleName; private String note; @Override