对于我的情况,我为每个文件存储了版本,试图在目录下找到最大版本的文件。
将目录路径传递给下面的方法总是返回0,因为模式匹配失败并带有prepare语句。
public int getMaxVersion(String path) {
int version = -1;
String query = "SELECT MAX(VERSION) FROM TABLE WHERE FILENAME LIKE ?";
Connection connection = database.getConnection();
PreparedStatement pstmt = null;
if(connection != null) {
try {
pstmt = connection.prepareStatement(query);
pstmt.setString(1, path + "%");
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
version = rs.getInt(1);
}
} catch (SQLException e) {
log(e.getMessage());
} finally {
database.close(connection, pstmt);
}
}
return version;
}
我已经验证了目录下的表文件。
SELECT * FROM TABLE;
FILENAME SIZE VERSION
C:\sb\pub\13.jpg 1032 2
C:\sb\pub\23.jpg 1562 3
(2 row, 2 ms)
我在嵌入模式下使用h2 db。
有人可以帮我解决一下我在这里缺少的东西吗?
like-expression中使用的反斜杠被视为转义字符,因此可以转义%
和_
。在你的情况下,你不需要它,所以你必须通过额外的反斜杠转义反斜杠或通过改变SQL来完全禁用转义:
SELECT MAX(VERSION) FROM TABLE WHERE FILENAME LIKE ? ESCAPE ''
...空字符串表示无法逃脱。有关详细信息,请参阅the H2 SQL grammar。