历史表(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文件就出来了