如何在Java中执行更新查询?

时间:2015-03-16 14:33:06

标签: java database oracle java-ee jdbc

我不是那么进入数据库而且我在Java应用程序中遇到以下问题,它必须执行一个非常简单的查询来更新我的数据库表上的字段。

所以,原始查询是这样的:

UPDATE coda_tx c SET c.FK_STATO = 2 WHERE c.PK_CODA = 62816; 

所以我实现了以下实现上一个查询的Java方法,这个方法:

public void updateStatus(int pkCoda, int newStatus) {

    String sql;

    StringBuffer sb = new StringBuffer();

    sb.append("UPDATE coda_tx c SET c.FK_STATO = ");
    sb.append(newStatus);
    sb.append(" WHERE c.PK_CODA = ");
    sb.append(pkCoda);

    sql = sb.toString();


    try {
        statment = connection.createStatement();
        ResultSet rs = statment.executeQuery(sql);
    } catch (SQLException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
}

我唯一的疑问与执行查询的部分有关,这一部分:

statment = connection.createStatement();
ResultSet rs = statment.executeQuery(sql);

我认为这是错误的,因为实际上存在 ResultSet ,它是用于通过 SELECT 操作检索行的对象。在这种情况下,我正在更新特定行的字段,而我没有检索将主题放入 ResultSet 对象的行。

那么,我该如何正确处理这种情况呢?我如何执行查询?

3 个答案:

答案 0 :(得分:1)

以下是如何做到这一点:

// updateCount contains the number of updated rows
int updateCount = statment.executeUpdate(sql);

答案 1 :(得分:0)

您正在寻找statement.executeUpdate(),它将返回受更新影响的行数。

  

int executeUpdate(String sql)抛出SQLException

  执行给定的SQL语句,该语句可以是INSERT,UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。

参考:http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)

答案 2 :(得分:0)

如果您的方法重新获得了两个变量,例如fkStato和pkCoda,它们包含您想要的值,您可以进行简单的查询:

int fkStato=2;
int pkCoda=62816;
try
  {

    // create our java preparedstatement using a sql update query
    PreparedStatement ps = conn.prepareStatement(
      "UPDATE coda_tx c SET c.FK_STATO = ? WHERE c.PK_CODA = ?;");

    // set the preparedstatement parameters
    ps.setInt(1,fkStato);
    ps.setInt(2,pkCoda);

    // call executeUpdate to execute our sql update statement and returns number of rows affected
   int updateCount = ps.executeUpdate();
    ps.close();
  }
  catch (SQLException se)
  {
    // log the exception
    throw se;
  }