代码之家  ›  专栏  ›  技术社区  ›  Tom Hanson

JavaSQLite结果集不返回任何内容

  •  0
  • Tom Hanson  · 技术社区  · 6 年前

    我试图从数据库中获取数据,但当我插入一些东西时,它什么也不返回。我不知道我做错了什么。我听了很多教程,但没发现有什么效果。

        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;
    }
    

    我犯了什么错误?它肯定会进入报表执行方法,因为我已经逐步通过代码。当我运行rs.下一个()返回false,因此永远无法访问系统输出打印.

    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 回复  |  直到 6 年前
        1
  •  1
  •   Joakim Danielson    6 年前

    您在execute方法中使用try with resource,这意味着您的连接和结果集在退出try{}时关闭,您需要直接从结果集中提取数据,并将该数据作为自定义类或某个集合类从方法中返回。

    if(returnResults) {
        results = stmt.executeQuery(sql);
        if (results.next()) {
            value = results.getInt(“value”);
            System.out.println(value);
        }
    }