public String[][] retrieveRows(String table, double limit, String regExp,
			String[][] tags, String[][] attributes, String[] columns,
			String[][] values, String[] doubleColumns, Double[][] doubleValues,
			double[][] range, String cursorName) throws MobbedException {
		validateTableName(table);
		validateColumns(columns);
		validateColumns(doubleColumns);
		String[][] rows = null;
		String qry = "SELECT * FROM " + table;
		qry += constructQualificationQuery(table, regExp, tags, attributes,
				columns, values, doubleColumns, doubleValues, range);
		if (isEmpty(cursorName) && limit != Double.POSITIVE_INFINITY)
			qry += " LIMIT " + (int) limit;
		try {
			PreparedStatement pstmt = connection.prepareStatement(qry,
					ResultSet.TYPE_SCROLL_INSENSITIVE,
					ResultSet.CONCUR_READ_ONLY);
			setQaulificationValues(pstmt, qry, tags, attributes, columns,
					values, doubleColumns, doubleValues);
			if (!isEmpty(cursorName) && limit != Double.POSITIVE_INFINITY) {
				if (!dataCursorExists(cursorName))
					createDataCursor(cursorName, pstmt.toString());
				rows = next(cursorName, (int) limit);
			} else {
				if (verbose)
					System.out.println(pstmt);
				rows = populateArray(pstmt.executeQuery());
			}
		} catch (SQLException ex) {
			throw new MobbedException(
					"Could not execute query to retrieve rows\n"
							+ ex.getMessage());
		}
		return rows;
	}