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

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

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

		// pegando somente as PK
		for (int nPK = 0; nPK < primaryKey.length; nPK++) {
			for (int nAtributo = 0; nAtributo < atributosNome.length; nAtributo++) {
				if (primaryKey[nPK].equals(atributosNome[nAtributo]) && atributosValor[nAtributo] != null) {
					atributosNome_PK_NotNull.add(atributosNome[nAtributo]);
					atributosValor_PK_NotNull.add(atributosValor[nAtributo]);
					break;
				}
			}
		}

		try {
			// Verificando se o array dos valores não_nulos não é vazio
			if (atributosValor_PK_NotNull.size() == 0)
				throw new Exception(
						"Nenhum valor para os atributos PrimaryKey no objeto da classe "
								+ this.subClasse.getSimpleName()
								+ " foi preenchido.");

			builder.append("DELETE FROM ");
			builder.append(this.nomeDaTabela);
			builder.append(" WHERE ");

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

			PreparedStatement ps = AbstractDAO.conn.prepareStatement(builder.toString());

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

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

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