I'm responsible for most of the ``goto``s in that list, so I guess I'll weigh in. I like the occasional use of ``goto`` as a method of exception handling, and judge uses of it as such. I would consider an exception for ``oQuery.numRowsAffected() == 0`` being thrown in a language with nicer exceptions than C++ a misuse, thus I don't see the need for them here. IMO, it's frankly easy enough to accomplish the same things without unfortunate amounts of code duplication or having to maintain additional state.

My suggestions (hammered out in this github UI, please excuse any grotesque typos; I do hope I get my points across and they aren't totally invalid):

For the first ``goto`` (with proper wrapping, of course):
```
if (oQuery.numRowsAffected() == 0 && (!updateAutoDjPlaylistReferences() || !updateLastPlayedDateTime())) {
     oTransaction.commit();
} // we leave the block after this
```

For the second (fwiw this is the only one I'd really give a second thought to, but my suggestion for the third ``goto`` will be aesthetically incompatible with leaving it):
```
if (oQuery.numRowsAffected() == 1) {
    oTransaction.commit();
    return;
}
```
Yes, there's a tiny amount of code duplication here, but it's not going to keep me up at night.

For the third: same format as the first.