2015-10-23 15 views
6

Ho questa tabellautilizzando Java per la ricerca di dati utilizzando parte della riga nel database di Microsoft Access

enter image description here

e sto usando il seguente codice per recuperare i dati dal mio tavolo che restituisce tutta la le parole inglesi che la sua parola curda contiene بةرز

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

Così funziona benissimo, stampa tutte le parole inglesi che voglio.
Il mio problema è che quando ottengo la parola curda corrispondente non stampa la cella completa. Esso solo stampe بةرز,

Per esempio l'output del codice precedente dovrebbe essere:

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

ma stampa

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

Che cosa posso fare per ottenere il risultato che voglio?

Nota che sto usando UCanAccess per la mia connessione al database,

+0

non sono in grado di ricreare il problema utilizzando l'UCanAccess 3.0.2. Ho copiato e incollato i dati di esempio in una tabella di accesso e ho copiato e incollato il codice in un progetto Eclipse. Quando lo eseguo, l'unica riga che corrisponde è "affare". –

+0

vuoi registrare il mio problema con il video e caricarlo su YouTube? –

+2

Cosa dovrebbe fare la tua espressione regolare? Cosa significa '[. ] * [: ,,] + [] * 'significa per te? Per me significa una sequenza di ':', ',', o ',' caratteri opzionalmente preceduti da spazi o punti e/o seguiti da spazi. Combinato con l'ancora '^', significa che non è permesso nessun altro testo, quindi sicuramente non corrisponderà a ciò che precede le prime 2 cerchie rosse. --- Inoltre, poiché i dati mostrati hanno 'Affair' che inizia con la lettera maiuscola e il tuo output ha inizio con la lettera minuscola, non stai * leggendo * quel * dati. – Andreas

risposta

1

Serbatoi per tutti, ho risolto solo con un paio di cambiamento all'interno del 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")); 
     } 
    } 
} 
Problemi correlati