2015-10-23 54 views
6

mam tej tabeliKorzystanie Java do wyszukiwania danych wykorzystując część wiersza w bazie danych programu Microsoft Access

enter image description here

I używam następujący kod do pobierania danych z moim stole że zwraca wszystkie Angielskie słowa to kurdyjski wyraz zawiera بةرز

targetText="بةرز"; 
try (PreparedStatement ps = conn.prepareStatement(
"SELECT English,Kurdish FROM Info " + 
"WHERE Kurdish = ? " + 
"OR REGEXP_MATCHES(Kurdish, ?) " + 
"OR REGEXP_MATCHES(Kurdish, ?) " + 
"OR REGEXP_MATCHES(Kurdish, ?) ")) { 
    ps.setString(1, targetText); 
    ps.setString(2, "^[. ]*" + targetText+ "[ ]*[:،,]+[ .]*$"); 
    ps.setString(3, "^[. ]*[:،,]+[ ]*" + targetText+ "[. ]*$"); 
    ps.setString(4, "^[. ]*[:،,]+[ ]*" + targetText+ "[ ]*[:،,]+[ .]*$"); 
    try (ResultSet rSet = ps.executeQuery()) { 
     while (rSet.next()) { 
     System.out.println(rSet.getString("English")); 
     System.out.println(rSet.getString("Kurdish")); 
     } 
    } 
} 

Wszystko działa dobrze, wyświetla wszystkie angielskie słowa, które chcę.
Mój problem polega na tym, że kiedy otrzymuję korespondujące słowo kurdyjskie, nie wypisuję całej komórki. To po prostu drukuje بةرز,

Na przykład wyjście poprzedniego kod powinien być:

aesthete 
بةرز ، جوانىثةرست 
aether 
زوَر ناسك ، بةرز ، ثيروَز ، ئاسمانى 
affair 
بةرز 

ale drukuje

aesthete 
بةرز 
aether 
بةرز 
affair 
بةرز 

Co mogę zrobić, aby uzyskać dane wyjściowe, które chcę?

Zauważ, że używam UCanAccess dla mojego połączenia z bazą danych,

+0

jestem w stanie odtworzyć problemu przy użyciu UCanAccess 3.0.2. Skopiowałem i wkleiłem Twoje przykładowe dane do tabeli dostępu, a następnie skopiowałem i wkleiłem twój kod do projektu Eclipse. Kiedy go uruchomię, jedyny pasujący wiersz to "romans". –

+0

Czy chcesz nagrać mój problem z wideo i przesłać go na YouTube? –

+2

Co mają zrobić twoje regex? Co robi "[. ] * [: ,,] + [] * "znaczy dla ciebie? Dla mnie oznacza sekwencję znaków ':', ',' lub ',' opcjonalnie poprzedzoną spacjami lub kropkami i/lub spacjami. W połączeniu z kotwicą '^', oznacza to, że nie jest dozwolony żaden inny tekst, więc z pewnością nie będzie pasował do tego, co jest przed pierwszymi 2 czerwonymi kółkami. --- Ponadto, ponieważ pokazane dane mają "Affair" zaczynając od dużej litery, a twoje dane wyjściowe zaczynają się od małej litery, * nie * czytasz * dane *. – Andreas

Odpowiedz

1

Pojemniki na wszystko, mam rozwiązać go tylko z kilkoma zmianami w regx

targetText="بةرز"; 
try (PreparedStatement ps = conn.prepareStatement(
    "SELECT English,Kurdish FROM Info " + 
    "WHERE Kurdish = ? " + 
    "OR REGEXP_MATCHES(Kurdish, ?) " + 
    "OR REGEXP_MATCHES(Kurdish, ?) " + 
    "OR REGEXP_MATCHES(Kurdish, ?) ")) { 
    ps.setString(1, targetText); 
    ps.setString(2, "^" + targetText+ "[ ]*(،)[.]*"); 
    ps.setString(3, "[.]*(،)[ ]*" + targetText+ "$"); 
    ps.setString(4, "[.]*(،)[ ]*" + targetText+ "[ ]*(،)[.]*"); 
    try (ResultSet rSet = ps.executeQuery()) { 
     while (rSet.next()) { 
     System.out.println(rSet.getString("English")); 
     System.out.println(rSet.getString("Kurdish")); 
     } 
    } 
}