Beispiel #1
0
 public int update() {
   if (updateColumnDeclarations.size() == 0) {
     throw new RuntimeException("Missing set or increment call.");
   }
   SQLStatement stat = new SQLStatement(db);
   stat.appendSQL("UPDATE ");
   from.appendSQL(stat);
   stat.appendSQL(" SET ");
   int i = 0;
   for (UpdateColumn declaration : updateColumnDeclarations) {
     if (i++ > 0) {
       stat.appendSQL(", ");
     }
     declaration.appendSQL(stat);
   }
   appendWhere(stat);
   StatementLogger.update(stat.getSQL());
   return stat.executeUpdate();
 }
  void update(Db db, Object obj) {
    if (primaryKeyColumnNames == null || primaryKeyColumnNames.size() == 0) {
      throw new IllegalStateException(
          "No primary key columns defined "
              + "for table "
              + obj.getClass()
              + " - no update possible");
    }
    SQLStatement stat = new SQLStatement(db);
    StatementBuilder buff = new StatementBuilder("UPDATE ");
    buff.append(db.getDialect().getTableName(schemaName, tableName)).append(" SET ");
    buff.resetCount();

    for (FieldDefinition field : fields) {
      if (!field.isPrimaryKey) {
        buff.appendExceptFirst(", ");
        buff.append(field.columnName);
        buff.append(" = ?");
        Object value = getValue(obj, field);
        stat.addParameter(value);
      }
    }
    Object alias = ClassUtils.newObject(obj.getClass());
    Query<Object> query = Query.from(db, alias);
    boolean firstCondition = true;
    for (FieldDefinition field : fields) {
      if (field.isPrimaryKey) {
        Object aliasValue = field.getValue(alias);
        Object value = field.getValue(obj);
        if (!firstCondition) {
          query.addConditionToken(ConditionAndOr.AND);
        }
        firstCondition = false;
        query.addConditionToken(new Condition<Object>(aliasValue, value, CompareType.EQUAL));
      }
    }
    stat.setSQL(buff.toString());
    query.appendWhere(stat);
    StatementLogger.update(stat.getSQL());
    stat.executeUpdate();
  }