综合技术--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表中导出的数据只能是

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文件代码如下

	//写入文件
	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();
			}
		}
	}

外层调用写入文件方法

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文件
输入图片说明

转载于:https://my.oschina.net/u/2312022/blog/830235

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值