This is normal and a "limitation" of Android. (Or a feature, depending on how you look at it.) Not really related to jTDS. You should execute all code that may use the network in a background thread. Note that this includes operations on a ResultSet instance such as rs.getInteger("foo"). In my app, my strategy is to fully process the ResultSet into a Java object (or a list thereof) which represents the database objects, then call a main-thread callback with that data model object. Making heavy use...
Same problem. In fact, even when just using ssl=request (not require) I get the "SSL handshake aborted ... Broken pipe" exception, regardless of whether the SQL Server wants to enforce encryption. In other words, jTDS is not even gracefully falling back to non-encrypted communication. Using 1.3.1 on Android.