=== try/finally: the close() exception replaces the query() exception ===
caught: java.lang.IllegalArgumentException: close failed on db-1
suppressed count: 0

=== try-with-resources: query() exception wins, close() exception is attached ===
caught: java.lang.IllegalStateException: query failed on db-1
suppressed count: 1
  suppressed: java.lang.IllegalArgumentException: close failed on db-1

=== two resources: closed in reverse order, each failure is suppressed ===
caught: java.lang.IllegalStateException: query failed on B
  suppressed: java.lang.IllegalArgumentException: close failed on B
  suppressed: java.lang.IllegalArgumentException: close failed on A

=== what printStackTrace() shows for suppressed exceptions ===
java.lang.IllegalStateException: query failed on db-1
	at com.ankurm.exceptions.SuppressedDemo$Conn.query(SuppressedDemo.java:9)
	Suppressed: java.lang.IllegalArgumentException: close failed on db-1
		at com.ankurm.exceptions.SuppressedDemo$Conn.close(SuppressedDemo.java:10)
