@Override
  public List<DNS53ResourceRecord> listResourceRecords(
      Session sess,
      String zoneId,
      String name,
      String value,
      String type,
      String sid,
      long ttl,
      long weight)
      throws ErrorResponse {
    List<DNS53ResourceRecord> records = new LinkedList<DNS53ResourceRecord>();

    String zoneName = getZoneName(zoneId);
    if (zoneName.equals("FAILED")) {
      throw DNS53Faults.NoSuchHostedZone(zoneId);
    }

    String query = "SELECT * FROM `msi`.`rrSet` WHERE zoneName = \'" + zoneName + "\'";
    if (type != null && !type.equals("")) {
      type = "\'" + type + "\'";
      query += " AND rdtype = " + type;
    }
    if (name != null && !name.equals("")) {
      String nameDot = name;
      if (name.charAt(name.length() - 1) != '.') {
        nameDot += ".";
      } else {
        name = name.substring(0, name.length() - 1);
      }
      name = "\'" + nameDot + "\'";
      query += " AND name = " + name;
    }
    if (value != null && !value.equals("")) {
      value = "\'" + value + "\'";
      query += " AND rdata = " + value;
    }
    if (sid != null && !sid.equals("")) {
      sid = "\'" + sid + "\'";
      query += " AND sid = " + sid;
    }
    if (ttl != -1) {
      query += " AND ttl = " + ttl;
    }
    if (weight != -1) {
      query += " AND weight = " + weight;
    }
    query += ";";
    // now query is created
    try {
      Statement stmt = this.sqlConnection.createStatement();
      ResultSet rs = stmt.executeQuery(query);
      while (rs.next()) {
        DNS53ResourceRecord temp = new DNS53ResourceRecord();
        temp.setName(rs.getString("name"));
        temp.setTtl(rs.getLong("ttl"));
        temp.setRdtype(rs.getString("rdtype"));
        temp.setRdata(rs.getString("rdata"));
        temp.setSid(rs.getString("sid"));
        temp.setWeight(rs.getLong("weight"));
        records.add(temp);
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw DNS53Faults.InternalError();
    }
    return records;
  }