@Override
	public void prefetchScores(Set<ExecutableRecord> exeSet, List<ExecutableRecord> missing)
			throws LSHException {
		initialize();
		int size = exeSet.size();
		Iterator<ExecutableRecord> iter = exeSet.iterator();
		ExecutableRecord[] queryGroup = new ExecutableRecord[VALUES_PER_QUERY];
		while (size > 0) {
			int curSize = size > VALUES_PER_QUERY ? VALUES_PER_QUERY : size;
			setUpQuery(curSize);
			for (int i = 0; i < curSize; ++i) {
				queryGroup[i] = iter.next();
				queryValue.keys[i] = queryGroup[i].getMd5();
			}
			ResponseOptionalValues response = queryValue.execute(db);
			if (response == null) {
				throw new LSHException(db.getLastError().message);
			}
			Object[] result = response.resultArray;
			for (int i = 0; i < curSize; ++i) {
				if (result[i] != null) {
					cacheMap.put((String) queryValue.keys[i], (Float) result[i]);
				}
				else if (missing != null) {
					missing.add(queryGroup[i]);
				}
			}
			size -= curSize;
		}
	}
Make sure the backing database table exists, and if it doesn't, create it.
If the table existed previously, try to read thresholds from it
@throws LSHException for problems with the connection
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/TableScoreCaching.java