[英]How to use Resultset?
我正在使用mysql表,现在我需要比较所有值与给定String的列。
我想检查结果集中的所有值是否都与encryptedString
匹配。 需要了解结果集的功能以及其工作方式。 在这里,我有一个方法,一些变量和2个mysql查询。
final String secretKey = "!!!!";
String name = jText.getText();
String pass = jTextPass.getText();
String originalString = pass;
String encryptedString = AES.encrypt(originalString, secretKey) ;
String decryptedString = AES.decrypt(encryptedString, secretKey) ;
PreparedStatement PS;
ResultSet result;
String query1 = "SELECT `pass` FROM `Remember_Pass` WHERE `name` =?";
PreparedStatement ps;
String query;
query = "UPDATE `tutor profile` SET `pass`=? WHERE `name`=?";
try {
PS = MyConnection.getConnection().prepareStatement(query1);
PS.setString(1, name);
PS.setString(2, encryptedString);
rs = PS.executeQuery();
//while(result.next() ){
//I am not understanding what to do here.
ps = MyConnection.getConnection().prepareStatement(query);
ps.setString(1, encryptedString);
ps.setString(2, name);
ps.executeUpdate();
PassSuccess success = new PassSuccess();
success.setVisible(true);
success.pack();
success.setLocationRelativeTo(null);
this.dispose();
//}
} catch (SQLException ex) {
Logger.getLogger(ForgetPassT.class.getName()).log(Level.SEVERE, null, ex);
}
ResultSet
对象包含有关您执行的查询的所有信息,它将包含所有列。 在您的代码中,结果变量将返回任何内容,因为代码中没有执行的部分,为此您必须...
Statement statement = MyConnection.getConnection().createStatement();
ResultSet result = statement.executeQuery("YOUR SELECT STATEMENT HERE");
while(result.next()){
String column1 = result.getString("columnName");
}
result.next()
方法是一个布尔方法,它表示ResultSet
对象是否仍然具有表的内部值,并将继续直到到达SELECT
语句检索的最后一行。 现在,如果要将某列的值与其他变量进行匹配,则可以在while(result.next())内进行操作。
result.getString("columnName")
将提取从值columnName
作为String
。
如果您想将内容保存在ArrayList
以保存数据,然后根据需要使用此列表,则代码可以类似于...:
Statement statement = MyConnection.getConnection().createStatement();
ResultSet result = statement.executeQuery("YOUR SELECT STATEMENT HERE");
List<Object> data = new ArrayList();
while(result.next()){
data.add(result.getString("columnName"));
}
return data;
显然,您必须使用要存储在列表中的事物类型来更改Object
。
或者,如果您要将数据存储在数组中。 正如我在评论中所说,这不是动态的,但是...:
Statement statement = MyConnection.getConnection().createStatement();
ResultSet result = statement.executeQuery("YOUR SELECT STATEMENT HERE");
String[] data = new String[NUMBER_OF_COLUMNS_IN_RESULTSET];
while(result.next()){
data[0] = result.getString("columnName1");
data[1] = result.getString("columnName2");
data[2] = result.getString("columnName3");
//And so on...
}
return data;
另一种方法是,如果要返回实体,则可以直接在POJO中设置ResultSet
的值:
Statement statement = MyConnection.getConnection().createStatement();
ResultSet result = statement.executeQuery("YOUR SELECT STATEMENT HERE");
Entity entity = new Entity();
while(result.next()){
entity.setColumnName1(result.getString("columnName1"));
entity.setColumnName2(result.getString("columnName2"));
entity.setColumnName3(result.getString("columnName3"));
//And so on...
}
return entity;
存储数据的方法有很多,只是问问自己如何在代码的其他部分中接收数据。
问候。
第一条提示:使用try-with-resources会关闭语句和结果集,即使在发生异常或返回时也是如此。 由于范围较小,这也减少了变量名的数量。 从我利用的最里面的块返回。 对于唯一名称,可以使用if-next代替while-next。 通过不仅仅记录异常来进行快速失败确实更好。 您可以按以下方式将已检查的异常与运行时异常交换,因此更易于编码。
String query1 = "SELECT `pass` FROM `Remember_Pass` WHERE `name` = ?";
String query = "UPDATE `tutor profile` SET `pass`=? WHERE `name`= ?";
try (PreparedStatement selectPS = MyConnection.getConnection().prepareStatement(query1)) {}
selectPS.setString(1, name);
//selectPS.setString(2, encryptedString);
try (ResultSet rs = selectPS.executeQuery()) {}
if (result.next()){ // Assuming `name` is unique.
String pass = rs.getString(1);
try (PreparedStatement ps = MyConnection.getConnection().prepareStatement(query)) {
ps.setString(1, encryptedString);
ps.setString(2, name);
int updateCount = ps.executeUpdate();
if (updateCount == 1) {
PassSuccess success = new PassSuccess();
success.setVisible(true);
success.pack();
success.setLocationRelativeTo(null);
return success;
}
}
}
}
} catch (SQLException ex) {
Logger.getLogger(ForgetPassT.class.getName()).log(Level.SEVERE, null, ex);
throw new IllegalStateException(e);
} finally {
dispose();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.