繁体   English   中英

如何使用结果集?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM