Per quanto riguarda il primo problema hai due soluzioni plausibili:
1) Bisogna conoscere le regole base della programmazione in Java: quando si hanno delle stringhe che contengono dei caratteri speciali (virgolette, apici, backslash) essi vanno quotati, ovvero preceduti da un backslash
codice:
String str = "Questa stringa contiene \"le virgolette\", ovviamente";
2) Usare i PreparedStatement: è senza alcun dubbio la via migliore. Esse consentono di immettere i valori "variabili" usando degli appositi metodi setter che permettono di non doversi preoccupare delle specifiche del DBMS:
codice:
PreparedStatement pstmt = con.prepareStatement("SELECT * FROM tabella WHERE campo=?;");
pstmt.setString(1, "pippo");
// Verrà valutata in questo modo:
SELECT * FROM tabella WHERE campo="pippo";
PS: mi risulta che MySQL accetti sia i doppi apici che gli apici singoli per delimitare le stringhe...
Ciao.