R,
If I read your reply correctly, you're saying that if you've prepared a statement on a table, and then after that prepare, the table happens to get dropped, you get 'UNKNOWN COMMAND' when you try and execute the statement?
If that's the case, I'm not able to duplicate that here locally with Connector/J 3.1.5 or 3.0.16 and MySQL-4.1.8 on Linux (are you on unix or Windows?), but that doesn't mean it's not happening for you. (I get 'java.sql.SQLException: Table 'test.nonExistentTable' doesn't exist'):
conn.createStatement().executeUpdate("CREATE TABLE IF NOT EXISTS nonExistentTable (field1 int PRIMARY KEY NOT NULL, field2 INT)");
PreparedStatement pStmt = conn.prepareStatement("SELECT * FROM nonExistentTable WHERE field1=1 ORDER BY field2 ASC");
conn.createStatement().executeUpdate("DROP TABLE nonExistentTable");
pStmt.executeQuery();
I'm still unclear as to what you mean by 'I can't easily tell whether this happens because using Conenctor/J 3.1.5 breaks something else prior to the code in question being executed :-(' as well, since the 'something else' didn't seem to be in your reply. Whatever that breakage might be, we'd like to fix it, as it seems to be a curious case (we have quite a large number of people in production w 3.1.5 without issues).
If you really want this tracked down and fixed, your best bet is to come up with a standalone testcase that demonstrates the error, including the DDL for your tables, and the Java code that causes the exception to be thrown and file it as a bug report at
http://bugs.mysql.com/ otherwise we will probably just continue trying to guess what your problem might be, and get no closer to an answer :(