CachedRowSet

本文展示了一段使用Java代码通过SQLServer JDBC驱动连接到数据库并更新数据的具体实例。该示例包括了设置缓存行集、指定同步提供者、定义数据库URL、登录凭证及SQL命令等步骤。
try {
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
      CachedRowSet crs = new CachedRowSetImpl();
      crs.setSyncProvider("com.fred.providers.HighAvailabilityProvider");
      crs.setUrl(
          "jdbc:microsoft:sqlserver://ldy:1433;DatabaseName=DaoGouTongDB");
      crs.setUsername("sa");
      crs.setPassword("mynameisxulong");
      crs.setCommand("select CompanyID,PersonName from guestbook");
      crs.execute();
      crs.first();
      crs.updateString("PersonName", "111111111111");
      crs.updateInt("CompanyID", 2);
      crs.updateRow();
      crs.close();
    }
    catch (Exception e) {
    }
public static ResultSet maskSensitiveData(ResultSet originalRs, String ruleJson) throws SQLException { // 创建可离线操作的CachedRowSet CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet(); crs.populate(originalRs); return new PgResultSetWrapper(crs) { // 定义需要脱敏的字段名 private final Set<String> maskedColumns = new HashSet<String>() {{ //this.addAll(set); //todo 时间类型无法脱敏 加上之后返回值为null,待测试去掉情况 add("name"); add("salary"); }}; @Override public String getString(String columnLabel) throws SQLException { String value = super.getString(columnLabel); return maskedColumns.contains(columnLabel.toLowerCase()) ? maskString(value, ruleJson) : value; } }; } private static String maskString(String origin, String ruleJson){ int length = origin.length(); String desData=""; if (ruleJson != null){ String maskType = JdbcConfig.getMaskType(""); String[] split = ruleJson.split("&"); for (String s : split) { String[] rule = s.split(","); Integer minLength = Integer.valueOf(rule[0]); Integer maxLength = Integer.valueOf(rule[1]); Integer front = Integer.valueOf(rule[2]); Integer back = Integer.valueOf(rule[3]); if (length>minLength && maxLength>length){ if (("1".equals(maskType))){ int maskLen = Math.max(0, length - front - back); StringBuilder maskBuilder = new StringBuilder(); for (int i = 0; i < maskLen; i++) { maskBuilder.append('*'); } String maskStars = maskBuilder.toString(); desData = origin.substring(0, front) + maskStars + (back > 0 ? origin.substring(length - back) : ""); }else if ("2".equals(maskType)){ StringBuilder sb = new StringBuilder(origin); // 屏蔽前部 for (int i = 0; i < Math.min(front, length); i++) { sb.setCharAt(i, '*'); } // 屏蔽后部 for (int i = Math.max(length - back, 0); i < length; i++) { sb.setCharAt(i, '*'); } desData = sb.toString(); }else { return origin; } } } } return desData; } 加上这些代码之后 timestamp和date类型返回null怎么解决
09-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值