java - java中的encode(<columnName>, 'escape' ) PostgreSQL等效项是什么?

标签 java string postgresql

我有一个 bytea 列存储在 Postgresql 数据库中。

列名:测试

Ex:  \x61736461640061736461736400

当我在选择查询中使用encode(test,'escape') 时,我得到这样的结果。

Ex: asdad\000asdasd\000

但是如果想在Java中进行编码转义怎么办? 即如果我有

字符串 str =\x61736461640061736461736400

如何获取 asdad\000asdasd\000 作为字符串数组?

谢谢。

最佳答案

您想要一个字符串数组还是想要asdad\000asdasd\000?您使用的是字节数组还是实际的字符串?

字符串到字节数组(如果使用字符串)

String str = "\x61736461640061736461736400"
str = str.substring(2); //get rid of \x
byte [] bytes = new byte[str.length()/2];
for(int i = 0; i < result.length; i++) {
  String numberStr = str.substring(i*2,i*2+2);
  int numberInt = Integer.parseInt(numberStr);
  bytes[i] = (byte) numberInt;
}

字节数组到字符串ArrayList

ArrayList<String> result = new ArrayList<String>();
int startIndex = 0;
for(int i = 0; i < bytes.length; i++) {
  if(bytes[i] == 0) {
    if(startIndex > i) {
      byte [] stringBytes = new byte[i - startIndex];
      for(int j = startIndex; j < i; j++) {
        stringBytes[j-startIndex] = bytes[j];
      }
      result.add(new String(stringBytes, "US-ASCII"));
    }
    startIndex = i+1;
  }
}

字节数组到八进制转义字符串

DecimalFormat formatter = new DecimalFormat("000");
StringBuilder resultBuilder = new StringBuilder();
for(byte b : bytes) {
  if(b > 0) {
    char c = (char) b;
    resultBuilder.append(c);
  } else {
    int bInt = b & 0xFF;
    String octal = Integer.toString(bInt, 8);
    int numPadZeroesNeeded = 3 - octal.length();
    resultBuilder.append('\');
    for(int i = 0; i < numPadZeroesNeeded; i++) {
      resultBuilder.append('0');
    }
    resultBuilder.append(octal);
  }
}

关于java - java中的encode(<columnName>, 'escape' ) PostgreSQL等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20421882/

相关文章:

java - Java Collections Framework 中常用方法(大小)的意外复杂性?

arrays - CAPL - 用逗号分隔字符串并设置在矩阵中

python - 'str' 不支持来自 Python2 的缓冲区接口(interface) Python3

c# - 将长字符串分成 60 个字符的长行但不要打断单词

sql - 是否有与 Python 的 map 函数等效的 postgresql SQL

hibernate - HQL : group by month

java - 如何从xml文件中获取值和路径?

java - 如何选择由脚本 selenium webdriver 生成的元素

linux - 在 Linux 上运行程序化 Postgres 数据库迁移的最佳实践

java - Java 中用于 C# 构造的加密/解密等价物