public int editar() {
		int linhasAfetadas = 0;
		StringBuilder builder = new StringBuilder();

		// todos os atributos
		String[] atributosNome = getNomeDosAtributosDaSubClasse();
		Object[] atributosValor = getValorDosAtributosDaSubClasse();

		// atributos NAO PRIMARY KEY
		List<String> atributosNome_NotPK = new ArrayList<String>();
		List<Object> atributosValor_NotPK = new ArrayList<Object>();

		// atributos PRIMARY KEYS NAO NULOS
		List<String> atributosNome_PK_NotNull = new ArrayList<String>();
		List<Object> atributosValor_PK_NotNull = new ArrayList<Object>();

		try {
			// Verificando se o array dos valores não é vazio
			if (is_todosValoresNulos(atributosValor))
				throw new Exception("Nenhum valor para Edição foi preenchido no objeto da classe "
						+ this.subClasse.getSimpleName());

			builder.append("UPDATE ");
			builder.append(this.nomeDaTabela);
			builder.append(" SET ");

			for (int i = 0; i < atributosNome.length; i++) {

				/*
				 * Inserindo nomes e valores NAO PRIMARY KEY em arraylist.
				 * Estes valores PODEM ser nulos.
				 */
				if (!is_campoIgualPrimaryKey(atributosNome[i])) {
					atributosNome_NotPK.add(atributosNome[i]);
					atributosValor_NotPK.add(atributosValor[i]);
				}

				/*
				 * Inserindo nomes e valores PRIMARY KEY em arraylist.
				 * Estes valores NÃO PODEM ser nulos.
				 */
				if (atributosValor[i] != null && !atributosValor[i].toString().isEmpty()
						&& is_campoIgualPrimaryKey(atributosNome[i])) {

					// atributos PRIMARY KEYS
					atributosNome_PK_NotNull.add(atributosNome[i]);
					atributosValor_PK_NotNull.add(atributosValor[i]);
				}
			}

			// Verificando se o array dos valores das PK não é vazio
			if (is_todosValoresNulos(atributosValor_PK_NotNull.toArray()))
				throw new Exception("Nenhum valor para Primary Key do objeto na classe "
						+ this.subClasse.getSimpleName() + "foi preenchido.");

			// Inserindo os Campos
			builder.append(montaStringCampoEqualCoringa(atributosNome_NotPK, atributosValor_NotPK,
					false, ","));

			builder.append(" WHERE ");

			// Inserindo os Ids
			builder.append(montaStringCampoEqualCoringa(atributosNome_PK_NotNull, atributosValor_PK_NotNull,
					false, "AND"));
			builder.append(";");

			// preparando o statement
			PreparedStatement ps = AbstractDAO.conn.prepareStatement(builder.toString());
			this.prepareStatement(ps,
					unirArrays(atributosValor_NotPK.toArray(), atributosValor_PK_NotNull.toArray()), false);

			// executando
			linhasAfetadas = ps.executeUpdate();
			ps.close();

		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(0);

		} catch (Exception e2) {
			e2.printStackTrace();
			System.exit(0);
		}
		return linhasAfetadas;
	}