UcanaccessSQLException: UCAExc:::3.0.1 表达式的数据类型不是布尔值
UcanaccessSQLException: UCAExc:::3.0.1 data type of expression is not boolean
我有一个table像下图
我需要得到它的库尔德语单词中包含"ب⑩رò"的所有英文单词,
所以我不能使用
select English from Table1 where Kurdish like '%بةرز%';
因为它也接受像这样的另一个词中的子串词
,
当我尝试在查询中使用正则表达式时:
query = "SELECT English FROM Table1 WHERE Kurdish REGEXP '^[.، ]*("+"بةرز" +")[ ،.]*$'";
s.execute(query);
显示以下异常
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.1 data type of expression is not boolean
问题出在我的正则表达式上还是什么?
请注意,我正在使用 UCanAccess 进行数据库连接
而不是
columnName REGEXP 'pattern'
我相信你需要使用
REGEXP_MATCHES(columnName, 'pattern')
这似乎对我有用...
String targetString = "بةرز";
try (PreparedStatement ps = conn.prepareStatement(
"SELECT English FROM Table1 " +
"WHERE Kurdish = ? " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) ")) {
ps.setString(1, targetString);
ps.setString(2, "^" + targetString + "[.، ]+.*");
ps.setString(3, ".*[.، ]+" + targetString + "$");
ps.setString(4, ".*[.، ]+" + targetString + "[.، ]+.*");
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
}
...尽管可能有更优雅的方法。
我有一个table像下图
我需要得到它的库尔德语单词中包含"ب⑩رò"的所有英文单词,
所以我不能使用
select English from Table1 where Kurdish like '%بةرز%';
因为它也接受像这样的另一个词中的子串词
,
当我尝试在查询中使用正则表达式时:
query = "SELECT English FROM Table1 WHERE Kurdish REGEXP '^[.، ]*("+"بةرز" +")[ ،.]*$'";
s.execute(query);
显示以下异常
net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.1 data type of expression is not boolean
问题出在我的正则表达式上还是什么?
请注意,我正在使用 UCanAccess 进行数据库连接
而不是
columnName REGEXP 'pattern'
我相信你需要使用
REGEXP_MATCHES(columnName, 'pattern')
这似乎对我有用...
String targetString = "بةرز";
try (PreparedStatement ps = conn.prepareStatement(
"SELECT English FROM Table1 " +
"WHERE Kurdish = ? " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) " +
"OR REGEXP_MATCHES(Kurdish, ?) ")) {
ps.setString(1, targetString);
ps.setString(2, "^" + targetString + "[.، ]+.*");
ps.setString(3, ".*[.، ]+" + targetString + "$");
ps.setString(4, ".*[.، ]+" + targetString + "[.، ]+.*");
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
}
...尽管可能有更优雅的方法。