2017-10-09 25 views
0

我正在尝试编写一个程序,以允许用户更新sql数据库中列中的某个值。当我将数据写入数据库时​​,我正在使用executeQuery,我去复制并粘贴相同的代码以便在更新值时使用。将executeQuery转换为executeUpdate

我更改了SQL语句来更新值,我读到我需要将我的executeQuery更改为executeUpdate。但是,当我去改变,我收到一个错误,说int不能转换为ResultSet

case "G": 

    System.out.println("Enter the player ID:"); 
    String playerId = FileUtility.getInput().nextLine(); 

    System.out.println("Here are the players"); 
    //theList = loadCampersFromDatabase(theList); 
    for (Player camper : PlayerDAO.selectAllById(playerId)) { 
     System.out.println(camper); 
    } 
    System.out.println("Enter the new amount paid"); 
    int newAmountPaid = FileUtility.getInput().nextInt(); 

    ArrayList<Player> players = new ArrayList(); 
    PreparedStatement ps = null; 
    String sql = null; 
    Connection conn = null; 
    try { 
     conn = ConnectionUtils.getConnection(); 

     sql = "UPDATE `Camper` SET `amountPaid` where id like ?"; 

     ps = conn.prepareStatement(sql); 
     ps.setString(1, playerId + "%"); 
     ResultSet rs = ps.executeUpdate(); 

     while (rs.next()) { 

     int newId = rs.getInt("id"); 
     String firstName = rs.getString("firstName"); 
     String lastName = rs.getString("lastName"); 
     String parentsName = rs.getString("parentsName"); 
     int phoneNumber = rs.getInt("phoneNumber"); 
     String email = rs.getString("email"); 
     int amountPaid = rs.getInt("amountPaid"); 
     players.add(new Player(newId, firstName, lastName, 
     parentsName, phoneNumber, email, amountPaid)); 

     } 

    } catch (Exception e) { 
     String errorMessage = e.getMessage(); 
     e.printStackTrace(); 
    } finally { 
     DbUtils.close(ps, conn); 
    } 

    break; 
+1

executeUpdate的返回表示有多少行受到影响,而不是的executeQuery一个int。 – BaSsGaz

+0

@BaSsGaz我不需要在最后返回任何东西,我只需要它来更新表中的那一列 –

+0

您的代码是针对选择查询的结果,您不能将其替换为executeUpdate。您可以在查询之前或之后运行更新,也可以更新结果集而不是运行更新。 – eckes

回答

0

你已经与executeUpdate()和executeQuery()方法混淆了。

  1. 的executeUpdate(): 执行“UPDATE”等statments,它返回一个int值,它告诉多少行是由你的更新语句影响。
  2. executeQuery() - 此方法仅执行'SELECT'查询,并且它返回ResultSet实例,该实例可用于进一步在循环(while)内部进行整合以通常使用select语句来获取和显示所有记录。

我建议你重做你的方法的逻辑。 我可以看到你的更新查询,你只在查询中传递了'id'的一个值,而不是'amountPaid'。
重写更新语句并使用executeUpdate()方法进行更新。

0

只要简单地除去Resultset及其相应while环路操作查询(UPDATEINSERTDELETECREATEALTERDROP)不返回结果集,只有SELECT查询。下面假设你的意思是绑定newAmountPaid进入查询:

sql = "UPDATE `Camper` SET `amountPaid` = ? where id like ?"; 

ps = conn.prepareStatement(sql); 
ps.setInt(1, newAmountPaid); 
ps.setString(2, playerId + "%"); 

ps.executeUpdate();