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