綜合技術--insert變update

應用場景:
mysql的t_user表中有1000條數據,這1000條數據中有700條壞數據(壞數據指的是t_user表中的logo字段的值是不正確的)。
需求:找出這些壞數據,使他們變成正確的數據。
處理步驟:
1.運維將t_user表的數據導出來,傳給我。
2.我手動的刪除t_user表中正確的數據。
3.在java層取出壞數據,循環壞數據,給logo字段賦值正確的值。
4.循環完後,我本地的mysql中t_user表中的數據就是正確的數據。
問題點
這些數據怎麼給運維呢?
我從本地t_user表中導出的數據只能是java

insert into t_user values(value1,value2,...)

即insert語句。
此處有兩種解決方案
方案1:將我生成的正確數據 與 原來手動刪除的正確數據 整合在一塊兒,而後將t_user表原封的發給運維。
方案2:直接將更新logo字段的sql發給運維,運維直接執行sql語句就行。
總結:方案1是將數據發給運維;方案2是將sql語句發給運維。
我採用的是第二種方案
上述已經說過了,循環完壞數據後,本地t_user表中的數據是正確的,可是隻能導出insert into語句。
所以,只能在執行更新logo字段的時候,將update語句保存下來。
保存起來的原理是:將update字符串寫入一個txt文件。將字符串寫入txt文件代碼以下mysql

//寫入文件
	public void testFileOutputStream(String sql,File file) throws IOException {

		//1.建立文件對象
		//輸出的物理文件能夠不存在,執行過程當中,
		//若不存在,則會自動建立;若存在,則會將現有文件覆蓋
		//File file = new File("sql.txt");
		//2.建立一個文件輸出流,用於寫入數據到文件中
		FileOutputStream fos = null;
		try {
			//FileOutputStream的第二個參數設置爲true,表示寫入某個文件的時候,內容不覆蓋原來的
			fos = new FileOutputStream(file,true);
			//3.寫入數據到文件中
			fos.write(sql.getBytes());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}finally {
			if (fos != null) {
				//4.關閉輸出流
				fos.close();
			}
		}
	}

外層調用寫入文件方法sql

public void test(){
    //1.建立文件對象
    File file = new File("sql.txt");
    //2.取出壞數據  
    select * from t_user;
    //3.循環壞數據  
    for(){
        //4.更新logo字段  
        update t_user set logo=? where id = ?
        //將update字符串寫入txt文件  
        String inFileString = "update t_user set logo=? where id = ?"+";"+"\n";
        testFileOutputStream(inFileString,file);
    }
}

最後在工程下面便會生成sql.txt文件
輸入圖片說明運維

相關文章
相關標籤/搜索