我正在使用PostgreSQL jdbc驱动程序来更新表。它包含多个列,其中一列表示记录数据文件的路径,名为Path
,类型为character varying
。只要路径发生变化,就可以通过调用记录类中的updatePath()
来更新记录。
发生的事情是通常失败并用空字符串替换Path
值。但是有时它有效。当然,如果我在pgAdmin上尝试查询它运行良好...
使用路径创建记录总是可以正常工作,并且更新整个记录(即所有列)会正确更新所有列(包括其他字符变化列)除了 Path
列!
这是我的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;
}
}
我的调试日志显示:
UPDATE "MyTable" SET "Path"='\\192.168.1.10\Store\2016 04\data73849.dat' WHERE "_ID_"=73849
可能是Postgres以某种方式(错误)解释路径中的\
字符吗?