UcanaccessSQLException:UCAExc ::: 3.0.1表达式的数据类型不是布尔值

时间:2015-10-22 13:36:39

标签: java regex ucanaccess

我有一张如下图所示的表

enter image description here

我需要获得其库尔德语单词包含的所有英语单词“بةرز”,
所以我不能使用

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进行数据库连接

1 个答案:

答案 0 :(得分:2)

而不是

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));
        }
    }
}

......虽然可能有一种更优雅的方式。