gpt4 book ai didi

java - 尝试使用资源 - 参数化的PreparedStatements

转载 作者:行者123 更新时间:2023-12-01 16:46:32 26 4
gpt4 key购买 nike

编辑建议的答案是 Not Acceptable ,想象一下,不能为我的每个方法声明附加方法吗?必须有一个嵌套的资源尝试解决方案。

如何将 try 语句与带有参数的准备语句一起使用?

以下两行出现错误。

preparedStatement.setString(1, uuid);
preparedStatement.setString(2, emailAddress);

Error Declaration final or effectively final variable exepcted

public UserBean getUserDevices(final String emailAddress, final String uuid) throws SQLException {
UserBean userBean = null;

String query = "SELECT user.id, user.emailAddress, device.uuid, device.active, device.user_id FROM user " +
"LEFT JOIN device ON user.id = device.user_id AND device.uuid = ? " +
"WHERE user.emailAddress = ?";

try (Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, uuid);
preparedStatement.setString(2, emailAddress);
ResultSet resultSet = preparedStatement.executeQuery();

) {
while(resultSet.next()) {
if(userBean == null) { // initialize user once while iterating for devices
userBean = new UserBean(resultSet.getInt("user.id"), resultSet.getString("user.emailAddress"), null);
}
if(resultSet.getString("device.uuid") != null) { // if device exists (it's a LEFT JOIN) then add
userBean.getDevices().add(new DeviceBean(0, resultSet.getString("device.uuid"), resultSet.getBoolean("device.active"), resultSet.getInt("device.user_id")));
}
}
}
return userBean;
}

最佳答案

使用内部try with resources,在外部try with resource之后,初始化语句,然后使用内部try with resources作为resultSet。

public UserBean getUserDevices(final String emailAddress, final String uuid) throws SQLException {
UserBean userBean = null;

String query = "SELECT user.id, user.emailAddress, device.uuid, device.active, device.user_id FROM user " +
"LEFT JOIN device ON user.id = device.user_id AND device.uuid = ? " +
"WHERE user.emailAddress = ?";

try (Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(query);
) {
preparedStatement.setString(1, uuid);
preparedStatement.setString(2, emailAddress);

try(ResultSet resultSet = preparedStatement.executeQuery();) {
while(resultSet.next()) {
if(userBean == null) { // initialize user once while iterating for devices
userBean = new UserBean(resultSet.getInt("user.id"), resultSet.getString("user.emailAddress"), null);
}
if(resultSet.getString("device.uuid") != null) { // if device exists (it's a LEFT JOIN) then add
userBean.getDevices().add(new DeviceBean(0, resultSet.getString("device.uuid"), resultSet.getBoolean("device.active"), resultSet.getInt("device.user_id")));
}
}
}
}
return userBean;
}

关于java - 尝试使用资源 - 参数化的PreparedStatements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49527991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com