Avoiding the use of ordinal() in an already-deployed enum
A negative parameter value or a parameter value >= values.length passed to fromDB() will throw an IndexOutOfBoundsException, which is less meaningful than the original IllegalArgumentException since the IndexOutOfBoundsException is complaining about an implementation detail rather than about bad input.

To avoid the IndexOutOfBoundsException, use a Map&lt;Integer, STATUS&gt; instead of an array.

However, if there are only a few defined values as in the question, a Map is probably not needed either.  fromDB() can simply iterate over values() and return the match when found, otherwise throw IllegalArgumentException.  Add the Map when performance profiling indicates fromDB() is a bottleneck.

Also, consider changing STATUS to Status, to follow standard naming conventions.