当前位置: 首页 > 知识库问答 >
问题:

JDBC在一个请求中选择和更新

简意
2023-03-14
ID varchar2() primary key, 
STATUS varchar2(),
....

我需要选择状态为'Delayed'的行,同时设置状态为'Progress'。

有没有使用JDBC的方法?

共有1个答案

邢炯
2023-03-14

由于您不能直接在JDBC中完成此操作,因此可以使用以下代码片段分两步完成此操作,希望对您有帮助:

这里我们应该使用jdbc:oracle作为驱动程序,使用update..set..where语法。

首先,您必须调用updateTable()将所有延迟行更改为PROGRESS,然后调用getAllDelayedObjects()将所有延迟行作为列表获取。

public class DataAccess {
    private Connection connection;
    private Statement statement;

    public boolean updateTable() throws SQLException {
        openConnection();
        try (PreparedStatement statement=
                connection.prepareStatement("update yourTableName set STATUS=? where STATUS=?")
        ) {
            statement.setString(1, "DELAYED");
            statement.setString(2, "PROGRESS");
            
            if (statement.executeUpdate()>0) {
                closeConnection();
                return true;
            }
            else {
                closeConnection();
                return false;
            }
        }

        catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }


    public List<YourEntityClass> getAllDelayedObjects() throws SQLException {
        openConnection();
        try (
                PreparedStatement statement = connection.prepareStatement("select * from users where STATUS=?")
        ) {
            
            statement.setString(2, "PROGRESS");
            ResultSet resultSet = statement.executeQuery();

            List<YourEntityClass> entityObjects = new ArrayList<>();

            while (resultSet.next()) {
                YourDaType object = new YourDaType();
                entityObject.setId(resultSet.getInt("ID"));
                entityObject.setStatus(resultSet.getString("STATUS"));
                // and whatever more properties you have in the table

                entityObjects.add(object);
            }
            closeConnection();
            return entityObjects;
        }
        catch (Exception e) {
            closeConnection();
            e.printStackTrace();
            return null;
        }
    }

    public void openConnection() throws SQLException {
        String username = "yourUserNameForDB";
        String pass = "yourPasswordForDB";
        connection = DriverManager.getConnection("jdbc:oracle://yourDBdomain:yourDBport/yourDataBaseName", username, pass);
    }

    public void closeConnection() throws SQLException {
        this.connection.close();
    }
}
 类似资料:
  • 目前我正在研究聊天服务器/客户端项目。我正在努力使用 select 处理多个请求,我的服务器脚本使用 select 模块,但客户端脚本没有。结果是,当用户输入消息时,其他客户端必须编写自己的消息才能通读对话。我已经在网上搜索了很多示例,但只能找到带有 sys.stdin 的代码片段,这不是我想要的。 我很高兴收到任何指示/解释。 服务器代码: 客户端代码:

  • 问题内容: 我发现了具有正确答案的类似问题。但是它们对我来说有点复杂。我只想要一个简单的基本声明。 我有: …和: 如何合并它们? 问题答案: 有关OUTPUT子句的更多信息,请查看此文章。

  • 我有一个RecycerView,其中每个项目都有3个radiobuttons分组在一个RadioGroup中。现在,用户只能在RecycerView中为每个项目选择一个radiobutton。但是我希望用户在整个RecycerView中只选择一个radiobutton。如何做到这一点? 这就是它目前的样子。 我希望在整个回收器视图中只检查1个radiobutton。如果选中了第一项中的第一个单选按

  • 我有一个表和几个线程(系统),它们从表中读取特定列并更新它。因此,我的问题如下: 我想确保在任何时候只有一个线程可以选择和更新该列。最好的解决方案是什么? PS:据我所知,在SQL Server中使用事务会锁定事务中的所有资源,但我对PostgreSQL一无所知。 非常感谢。

  • 问题内容: 我有以下查询,希望在单个选择请求中运行: 问题在于,所有内容都是通过单独的多个查询获取的。我只希望在单个请求中获取团队和团队的球员以及每个球员的技能。但是取而代之的是,我有多个选择查询来获取每个球队,每个球员,每个球员的数据和技能。 以下是带有给定注释的实体: 游戏实体: 团队实体: 玩家实体: 您能指出犯下的错误吗?我需要一个选择查询来加载游戏,它是团队,团队的球员和每个球员的技能。

  • 问题内容: 我想知道如何从MySQL表中选择一个值。该表包括列和其他列(是自动递增的,并且是唯一的)。给定用户名,我想将一个会话变量设置为等于给定用户名的列中的值。这是我已经尝试过的代码: 到目前为止,我得到: 可捕获的致命错误:无法将类stdClass的对象转换为字符串。 强制转换为字符串类型不能解决问题。 问题答案: 不要在查询中的字段名称或表名称中使用引号。 提取对象后,您需要通过属性/属性