您的位置:首页 > 教育 > 培训 > 网站搭建要多少钱_宝鸡网站seo_肇庆百度快照优化_海外营销方案

网站搭建要多少钱_宝鸡网站seo_肇庆百度快照优化_海外营销方案

2025/1/8 14:59:58 来源:https://blog.csdn.net/qq_42985657/article/details/144966908  浏览:    关键词:网站搭建要多少钱_宝鸡网站seo_肇庆百度快照优化_海外营销方案
网站搭建要多少钱_宝鸡网站seo_肇庆百度快照优化_海外营销方案

解决的问题

对于很对财税的业务系统,修改新老科目比较麻烦。
因为报表里面配置了很多公式,里面写了很多老科目,如果一个个手工替换,会耗时较久。
我的思路是通过程序来跑这个功能。下面用科目编码来举例。如何修改。

准备工作

1.首先要有一个新老科目的对照表:

老科目新科目
660205140166021011

2.根据新老科目对照表建一个数据库表:

– 创建B表,包含原编码和新编码的对照关系

CREATE TABLE B (b1 VARCHAR(255) PRIMARY KEY, -- 原编码b2 VARCHAR(255)              -- 新编码
);

– 插入示例数据到B表

INSERT INTO B (b1, b2) VALUES
('6602051401', '66021011'),
('6602040101', '66020901');

关于excel数据可以用根据直接导入数据库,或者可以手工拼接一个insert语句。
拼接语句的链接可以参考如下:
https://blog.csdn.net/qq_42985657/article/details/129079141

我之前的链接写了一个update的,把语法调整一下就可以了。

准备工作总结:

1.现在数据库中有一个需要更新数据的业务表A的a1列(a1列就是要修改的列),以及a2列(a2列就是表A的唯一标识字段或者是组合唯一标识字段)。
2.一个表B来存储新老科目的对照关系,b1是原编码,b2是新编码。

代码编写

思路

遍历A表的每一行,并使用字符串函数来精确定位和替换原编码。下面的代码中数据库链接方式,以及6个参数要根据实际情况来编写。

代码

import java.sql.*;
import java.util.*;public class CodeUpdater {// 封装数据库连接信息private static class DBConfig {String url;String username;String password;DBConfig(String url, String username, String password) {this.url = url;this.username = username;this.password = password;}}// 封装表及字段信息private static class TableConfig {String sourceTable;String fieldToUpdate;String uniqueIdentifier;String mappingTable;String mappingFieldOldCode;String mappingFieldNewCode;TableConfig(String sourceTable, String fieldToUpdate, String uniqueIdentifier,String mappingTable, String mappingFieldOldCode, String mappingFieldNewCode) {this.sourceTable = sourceTable;this.fieldToUpdate = fieldToUpdate;this.uniqueIdentifier = uniqueIdentifier;this.mappingTable = mappingTable;this.mappingFieldOldCode = mappingFieldOldCode;this.mappingFieldNewCode = mappingFieldNewCode;}}// 更新编码的核心逻辑方法private static void updateCodes(Connection conn, TableConfig tableConfig) throws SQLException {Map<String, String> codeMap = loadCodeMap(conn, tableConfig);updateSourceTable(conn, tableConfig, codeMap);}// 从映射表中加载编码映射关系private static Map<String, String> loadCodeMap(Connection conn, TableConfig tableConfig) throws SQLException {Map<String, String> codeMap = new HashMap<>();String sql = "SELECT " + tableConfig.mappingFieldOldCode + ", " + tableConfig.mappingFieldNewCode +" FROM " + tableConfig.mappingTable;try (PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery()) {while (rs.next()) {codeMap.put(rs.getString(tableConfig.mappingFieldOldCode), rs.getString(tableConfig.mappingFieldNewCode));}}return codeMap;}// 更新源表中的编码private static void updateSourceTable(Connection conn, TableConfig tableConfig, Map<String, String> codeMap) throws SQLException {conn.setAutoCommit(false); // 开启事务String sqlSelect = "SELECT " + tableConfig.uniqueIdentifier + ", " + tableConfig.fieldToUpdate +" FROM " + tableConfig.sourceTable;String sqlUpdate = "UPDATE " + tableConfig.sourceTable + " SET " + tableConfig.fieldToUpdate + " = ? WHERE " +tableConfig.uniqueIdentifier + " = ?";try (PreparedStatement pstmtSelect = conn.prepareStatement(sqlSelect);ResultSet rs = pstmtSelect.executeQuery();PreparedStatement pstmtUpdate = conn.prepareStatement(sqlUpdate)) {while (rs.next()) {String id = rs.getString(tableConfig.uniqueIdentifier);String originalString = rs.getString(tableConfig.fieldToUpdate);// 替换编码for (Map.Entry<String, String> entry : codeMap.entrySet()) {if (originalString != null && originalString.contains(entry.getKey())) {originalString = originalString.replace(entry.getKey(), entry.getValue());}}// 更新记录pstmtUpdate.setString(1, originalString);pstmtUpdate.setString(2, id);pstmtUpdate.executeUpdate();}conn.commit(); // 提交事务} catch (SQLException e) {conn.rollback(); // 发生异常时回滚事务throw e; // 重新抛出异常以便上层处理}}// 主方法,用于启动更新流程public static void main(String[] args) {// 示例命令行参数
String[] exampleArgs = {"employees",      // sourceTable: 源数据表名"department",     // fieldToUpdate: 需要更新的字段名"employee_id",    // uniqueIdentifier: 用于唯一标识记录的字段名"dept_mapping",   // mappingTable: 映射表名,用于查找旧代码对应的新代码"old_dept_code",  // mappingFieldOldCode: 映射表中存储旧代码的字段名"new_dept_code"   // mappingFieldNewCode: 映射表中存储新代码的字段名
};// 检查参数数量(虽然这里使用示例参数,但通常在实际应用中仍需检查)
// if (args.length != 6) {
//     System.out.println("Usage: java CodeUpdater <sourceTable> <fieldToUpdate> <uniqueIdentifier> <mappingTable> <mappingFieldOldCode> <mappingFieldNewCode>");
//     return;
// }// 解析命令行参数(这里使用示例参数进行演示)
TableConfig tableConfig = new TableConfig(exampleArgs[0], // 源数据表名exampleArgs[1], // 需要更新的字段名exampleArgs[2], // 用于唯一标识记录的字段名exampleArgs[3], // 映射表名,用于查找旧代码对应的新代码exampleArgs[4], // 映射表中存储旧代码的字段名exampleArgs[5]  // 映射表中存储新代码的字段名
);// 数据库连接配置DBConfig dbConfig = new DBConfig("jdbc:mysql://localhost:3306/your_database_name", "your_database_username", "your_database_password");Connection conn = null;try {// 建立数据库连接conn = DriverManager.getConnection(dbConfig.url, dbConfig.username, dbConfig.password);// 调用核心逻辑方法更新编码updateCodes(conn, tableConfig);System.out.println("编码替换完成。");} catch (SQLException e) {e.printStackTrace();} finally {// 关闭数据库连接if (conn != null) {try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }}}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com