Subdivision failed on boolean-subtracted object [duplicate]

I'm working on this project including a cylinder with holes in it. I've made the holes using the boolean modifier by subtracting smaller cylinders from the main cylinder. Here's an image of the entire object in case that helps to answer my question:

The object got lot's of edges that I want to smooth out using the subdivision modifier, but like a lot of you might know, this action will cause an action resulting in this mess:

I'm pretty sure the problem is caused by all the loose vertices around the holes that aren't connected to anything. Please speak your mind and tell me if I'm wrong.

I've tried to connect all the vertices between the holes, which resulted in a way better finish than before, but still not perfect. It takes forever to do so, and I end up with way more vertices than I need, so I'd prefer an alternative if possible. Here you can see the result I got, but be aware I haven't done this on the inside, so focus on how it on the outside:

I know you can just subdivide the cylinder before subtracting the holes, but then the holes don't get smoothed out. This was the solution answered to another question asked by 'user5199' on this link: Cutting Holes with Boolean Modifier Makes Subdivision Surface Impossible

That is, of course, a possible way to fix the problem, but I think there has to be a simpler way to smooth everything (incl. the holes) without destroying the object as shown on my 3rd image.

Any suggestions? Any experience?

It is not always efficient to use boolean tool when you are using subdivision. Subdivision demands good topology especially on curved even surfaces and boolean often needs cleanup afterwards. This is how I do it.

Enable the LoopTools add-on.

Create a cylinder with sufficient amount of faces to hold your holes without deforming too much. Divide your cylinder so that faces are square and even.

Select at least a square of four faces (2x2, 3x3 etc).

Run Specials menu (w), LoopTools, Circle. This will make the circles perimeter to be arranged in a circle. Make sure to uncheck the "flatten" option (you will want the circle to be curved on the surface).

Inset the selection a tiny bit to create a support loop around the hole and then delete the inner faces.

Add a solidify and a subdivision modifier and configure then to your needs.

Add other needed support loops and delete unneeded loops. If you need you could apply the solidify modifier and add extra support loops on the rim.