COLLATE Latin1_General_CS_AS
non è una cosa della sintassi di Oracle, sembra una cosa del server sql
il tuo sql di base potrebbe essere:
ResultSet rs = statement.executeQuery("SELECT NAMES, AUTHOR, ID FROM BOOKS WHERE upper(NAMES) LIKE upper('%"+word+"%') OR upper(AUTHOR) LIKE upper('%"+word+"%') ");
ma questa è una scansione completa dell'indice/tabella a prescindere, quindi non sarà veloce. per ricerche di stringhe veloci, Oracle ha testo Oracle . ti suggerisco di leggerlo e implementare un indice di testo se devi eseguire questo tipo di ricerche illimitate (su tabelle di grandi dimensioni).