Java SQLite ResultSet ничего не вернуть - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь получить данные из базы данных, но она ничего не возвращает, когда я просто что-то вставляю. Я не знаю, что я делаю не так. Я следовал многим учебникам, но ничего не нашел.

    sql = "INSERT INTO optionsetvalue (optionsetid, value, text) VALUES ("+id+", 10000, 'Monday')";
    executeInsert(sql);

    sql = "SELECT * FROM optionsetvalue";
    ResultSet rs = execute(sql, true);
    try {
        while(rs.next())
        {
            System.out.println(rs.getInt("value"));
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

и у меня есть этот метод

protected ResultSet execute(String sql, boolean returnResults)
{
    ResultSet results = null;
    if(databaseExists)
    {
        try (Connection conn = DriverManager.getConnection(url);
                Statement stmt = conn.createStatement()) {

            if(returnResults) results = stmt.executeQuery(sql);
            else stmt.execute(sql);

        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    }
    return results;
}

Какую ошибку я совершаю? Это определенно делается в метод stmt.executeQuery, как я прошел через код. Когда я запускаю rs.Next (), он возвращает false, поэтому никогда не попадает в System.out.println.

protected long executeInsert(String sql)
{
    try(
        Connection conn = DriverManager.getConnection(url);
        PreparedStatement statement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    ) {

        int affectedRows = statement.executeUpdate();

        if (affectedRows == 0) {
            throw new SQLException("Creating user failed, no rows affected.");
        }

        try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
            if (generatedKeys.next()) {
                return generatedKeys.getLong(1);
            }
            else {
                throw new SQLException("Creating user failed, no ID obtained.");
            }
        }
    } catch(SQLException e)
    {
        System.out.println(e.getMessage());
    }
    return -1;
}

1 Ответ

0 голосов
/ 13 ноября 2018

Вы используете try-with-resource в своем методе execute, что означает, что ваше соединение и набор результатов закрываются, когда вы выходите из try {}, вам нужно извлечь данные непосредственно из набора результатов и вернуть эти данные изМетод как пользовательский класс или некоторый класс коллекции.

Очень упрощенный пример

if(returnResults) {
    results = stmt.executeQuery(sql);
    if (results.next()) {
        value = results.getInt(“value”);
        System.out.println(value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...