Java 字符变化列上的Postgresql更新将清空该列

Java 字符变化列上的Postgresql更新将清空该列,java,windows,postgresql,jdbc,Java,Windows,Postgresql,Jdbc,我正在使用PostgreSQL jdbc驱动程序更新一个表。它包含几列,其中一列表示记录数据文件的路径,名为path,类型为字符变化。每当路径更改时,通过调用record类上的updatePath()更新记录 发生的情况是,它通常会失败,并用空字符串替换路径值。但有时它是有效的。当然,如果我在pgAdmin上尝试查询,它会运行良好。。。 使用路径创建记录总是可以正常工作,并且更新整个记录(即所有列)会正确地更新除路径列之外的所有列(包括其他字符变化列) 这是我的update()方法: publi

我正在使用PostgreSQL jdbc驱动程序更新一个表。它包含几列,其中一列表示记录数据文件的路径,名为
path
,类型为
字符变化
。每当路径更改时,通过调用record类上的
updatePath()
更新记录

发生的情况是,它通常会失败,并用空字符串替换
路径
值。但有时它是有效的。当然,如果我在pgAdmin上尝试查询,它会运行良好。。。 使用路径创建记录总是可以正常工作,并且更新整个记录(即所有列)会正确地更新除
路径
列之外的所有列(包括其他字符变化列)

这是我的
update()
方法:

public static final String IDCOL = "_ID_"; // Primary key, auto-increment
public static final String tableName = "MyTable"; // Table name

private int id; // The record ID
...
private String path; // Path to the record

public boolean updatePath(Connection cnx) {
    String sql = "UPDATE \""+tableName+"\" SET \"Path\"=? WHERE \""+IDCOL+"\"="+id;
    try (PreparedStatement ps = cnx.prepareStatement(sql)) {
        ps.setString(1, path);
        log.debug("<sql>"+ps+"</sql>");
        ps.executeUpdate();
        return true;
    } catch (SQLException e) {
        log.error("Unable to update path: "+e.getMessage());
        return false;
    }
}

路径中的
\
字符是否被Postgres以某种方式(错误地)解释了?

不太可能,但您可以通过对值执行
替换('\\','/')
来检验您的假设,因此不存在反斜杠(当然,仅用于测试)。如果你能证明是这样的话,报告一个错误。@Andreas,我会试试的,谢谢。只有当你使用转义字符串(PG扩展名)或者标准字符串设置为off(请参阅)时,反斜杠才应该被识别。@Andreas使用
/
而不是
`(原因尚待确定)。我将切换回
`进行确认。可能性不大,但您可以通过对值执行替换('\\','/')来测试您的假设,因此不存在反斜杠(当然,仅用于测试)。如果你能证明是这样的话,报告一个错误。@Andreas,我会试试的,谢谢。只有当你使用转义字符串(PG扩展名)或者标准字符串设置为off(请参阅)时,反斜杠才应该被识别。@Andreas使用
/
而不是
`(原因尚待确定)。我将切换回
`进行确认。
UPDATE "MyTable" SET "Path"='\\192.168.1.10\Store\2016 04\data73849.dat' WHERE "_ID_"=73849