利用csv文件批量编辑更新sql

   历史表(popularity_ranking)数据中只存了用户手机号,业务需求中需要新增用户昵称字段,

这里我们用户表和popularity_ranking表在不同数据库中,有两种方法:1.编写后台服务调用不同数据库,

进行sql更新;2.导出csv文件修改sql。因为项目并没有采用多数据源配置,而且表数据量不大,这里我们

采用导出用户表数据,然后根据用户id,昵称批量修改sql导入到popularity_ranking表中。

1.从oracl中导出要用到的字段

 2.使用CsvReader进行sql重写

package zhx.com;

import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;

/**
 * @Author: SimonHu
 * @Date: 2019/11/18 10:16
 * @Description:
 */
public class SwitchSql {
    public static void main(String[] args) throws IOException {
        ArrayList<String[]> csvList = new ArrayList<String[]>(); //用来保存数据
        //注明:或者可以通过前端上传的文件,用一个方法获取上传文件名uploadName(String)
        String csvFilePath = "C:\\Users\\admin\\Desktop\\222.csv";
        String csvWriteFilePath = "C:\\Users\\admin\\Desktop\\write.csv";
        CsvReader reader = new CsvReader(csvFilePath, ',', Charset.forName("UTF-8"));    //解决中文编码
//             reader.readHeaders(); // 跳过表头   如果需要表头的话,不要写这句。
        while (reader.readRecord()) { //逐行读入除表头的数据
            csvList.add(reader.getValues());
        }
        reader.close();
        CsvWriter csvWriter = new CsvWriter(csvWriteFilePath, ',', Charset.forName("UTF-8"));
     //保证输出字符串带引号
     //csvWriter.setForceQualifier(true);
     //指定文本限定符
     //csvWriter.setTextQualifier('"');
    
for (int row = 0; row < csvList.size(); row++) { String cell0 = csvList.get(row)[0]; String cell1 = csvList.get(row)[1]; String sql = "update popularity_ranking set nick_name='" + cell1 + "' where user_id =" + cell0 + ";"; String[] contents = {sql}; csvWriter.writeRecord(contents); System.out.println(sql); } csvWriter.close(); } }

重写之后的sql文件就出来了

 

posted @ 2019-11-18 10:44  748573200000  阅读(788)  评论(0编辑  收藏  举报