2015-10-22 4 views
2

У меня есть таблица, как на следующем рисункеUcanaccessSQLException: UCAExc ::: 3.0.1 тип данных выражения не булево

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 

Является ли проблема с моим регулярным выражением или что?
Обратите внимание, что i'am с использованием UCanAccess для моего подключения к базе данных

ответ

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

... хотя может быть более элегантный способ сделать это.

+0

Другим решением может быть использование аналогичного предложения с критериями на основе регулярных выражений (но я не могу сказать, является ли он более или менее элегантным, он просто совместим с доступом и поддерживается как доступом, так и ucanaccess). См. Здесь: http://stackoverflow.com/questions/29583752/regular-expression-matching-when-querying-an-access-database-with-ucanaccess – jamadei

+0

Большое спасибо, он отлично работал с некоторыми изменениями 'ps.setString (1, targetString); ps.setString (2, "^ [.] *" + TargetString + "[] * [: ,,] + [.] * $"); ps.setString (3, "^ [.] * [: ,,] + [] *" + targetString + "[.] * $"); ps.setString (4, "^ [.] * [: ,,] + [] *" + targetString + "[] * [: ,,] + [.] * $"); ' –