2015-10-23 3 views
6

Ich habe diese Tabellejava Verwendung für Suche nach Daten von einem Teil der Reihe in Microsoft Access-Datenbank mit

enter image description here

Und ich bin mit dem folgenden Code Daten aus meiner Tabelle abzurufen , die alle kehrt die englische Wörter, die ihre kurdische Wort enthält بةرز

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

So funktioniert es gut, er druckt alle englischen Wörter, die ich will.
Mein Problem ist, dass wenn ich das entsprechende kurdische Wort bekomme, es nicht die komplette Zelle ausdruckt. Es ist einfach druckt بةرز,

Zum Beispiel sollte der Ausgang des vorherigen Code sein:

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

Aber es druckt

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

Was kann ich die Ausgabe, die ich zu bekommen?

Bitte beachte, dass ich UCanAccess für meine Datenbank-Verbindung verwende,

+0

Ich bin nicht in der Lage das Problem neu erstellen UCanAccess mit 3.0.2. Ich habe Ihre Beispieldaten in eine Access-Tabelle kopiert und eingefügt und Ihren Code in ein Eclipse-Projekt kopiert und eingefügt. Wenn ich es laufe, ist die einzige Zeile, die passt, "Affäre". –

+0

willst du, dass ich mein Problem mit Video aufzeichne und es auf YouTube hochlade? –

+2

Was sollen deine Regex tun? Was bedeutet '[. ] * [: ,,] + [] * 'dir bedeuten? Für mich bedeutet das eine Abfolge von ':', ',', oder ',' Zeichen, denen optional Leerzeichen oder Punkte vorausgehen und/oder gefolgt von Leerzeichen. Kombiniert mit dem Anker '^' bedeutet dies, dass kein anderer Text erlaubt ist, also wird er definitiv nicht mit dem übereinstimmen, was vor den ersten 2 roten Kreisen ist. --- Da die angezeigten Daten, Affair 'mit Großbuchstaben beginnen und Ihre Ausgabe mit Kleinbuchstaben beginnt, lesen Sie * diese * Daten nicht *. – Andreas

Antwort

1

Tanks für alle, habe ich es nur mit ein paar Wechsel innerhalb der REGx gelöst

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