2015-10-23 22 views
6

Bu tablo varmicrosoft access veritabanında satırın bölümünü kullanarak veri için arama için java kullanma

enter image description here

Ve bütün döndüren masamın veri almak için aşağıdaki kodu kullanıyorum Kürt kelimesi yüzden iyi çalışıyor بةرز

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

içeren İngilizce kelimeleri, bu tek istediğim İngilizce kelime yazdırır.
Sorunum şu ki, karşılık gelen Kürtçe kelimeyi aldığımda, tüm hücreyi yazdırmıyor. Bu sadece baskılar بةرز,


Örneğin önceki kodun çıktısı olmalıdır:

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

Ama

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

yazdırır İstediğim çıktı almak için ne yapabilirim? Benim veritabanı bağlantısı için UCanAccess kullanıyorum

Not herkes için

+0

Ben UCanAccess kullanarak sorunu tekrar alamıyorum RegX içinde birkaç değişiklik ile çözdük 3.0.2. Örnek verilerinizi bir Access tablosuna kopyalayıp yapıştırdım ve kodunuzu bir Eclipse projesine kopyalayıp yapıştırdım. Ben koştuğumda, eşleşen tek sıra "ilişki" dir. –

+0

Sorunumu video ile kaydedip YouTube’a yüklemek istiyor musunuz? –

+2

Regex'iniz ne yapmalı? Nedir? ] * [: ،,] + [] * 'Sizin için ne anlama geliyor? Bana göre, isteğe bağlı olarak boşluklardan veya dönemlerden önce ve/veya boşluklarla takip edilen bir dizi:: ',' ​​، 'veya', 'karakterleridir. '^' Ankrajı ile birleştiğinde, başka hiçbir metne izin verilmiyor demektir, bu yüzden ilk 2 kırmızı daireden önce gelenlerle uyuşmayacaktır. --- Ayrıca, gösterilen veriler büyük harfle başlayan Affair'e sahip olduğundan ve çıktınız küçük harfle başlıyorsa, * bu * veriyi * okuyorsunuz demektir. – Andreas

cevap

1

Tanklar, sadece

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