A tuple is (at least shallowly) immutable by design (and that’s a good design). You cannot do:
val tuple = (1, "abc", 'z')
tuple._2 = "something else" // doesn't compile
OTOH with case classes you can mark fields as vars instead of default vals:
case class MyType(var a: Int, var b: String, var c: Char)
val myValue = MyType(1, "abc", 'z')
myValue.b = "something else" // compiles fine
If you want to reuse already created objects then custom case classes offer more flexibility than standard tuples. However, I don’t recommend that in general - side-effect free code is often easier to reason about.
JDBC is a low level API, not meant to be concise, readable, strongly typed or programmer friendly. Therefore there are tons of higher level libraries (built on top of JDBC) that provide improved API. Scala is oriented towards high-level abstractions rather than low-level ones.