Java
SQL
SQLite3
AutoCloseable

ResultSetを返そうとしてAutoCloseableでハマってる(現在進行形)

概要

設計が悪いのは分かってる
SQLite使って取ったデータをResultSetで返そうとしたらデータが入ってなかった話

コード

public static ResultSet randomget(int limit, String category, String diff, String artist, String bpm) {
    ResultSet set = null;
    try {
        Class.forName("org.sqlite.JDBC");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    Configuration config = Main.configuration;
    try(Connection connection = DriverManager.getConnection("jdbc:sqlite:"+config.getPath()); Statement statement = connection.createStatement()) {
        set = statement.executeQuery(execute(limit, category, diff, artist, bpm));
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return set;
}

原因

try()の中だけがAutoCloseable適用されるのかと思ったらtry{}ブロック内まで適用されていたっぽい
ResultSetまでがcloseされてた関係で戻り値のデータが消えていた

対応

try-catch-resources構文を諦めるか,Listかなんかに変換して返すかしかない・・・?
書き方が悪いのかな・・・いい方法あったら追記します