public static void main(final String[] args) throws Exception {
		final Date now = new Date();
		System.out.println("start LoadFFF\t" + now);
		System.out.println("\tfor details see: http://www.win-vector.com/blog/2011/01/sql-screwdriver/");
		System.out.println("\tfor latest version see: https://github.com/WinVector/SQLScrewdriver");
		final int firstSourceArg = 3;
		if(args.length<4) {
			throw new Exception("use: LoadFFF dbProbsURI fieldSpecURI.tsv tableName inputURI+");
		}
		final URI propsURI = new URI(args[0]);
		final URI fieldSpecURI = new URI(args[1]);
		final String tableName = args[2];
		System.out.println("\tcwd: " + (new File(".")).getAbsolutePath());
		System.out.println("\tDBProperties XML:\t" + propsURI.toString());
		System.out.println("\ttableName:\t" + tableName);
		final Properties props = DBUtil.loadProps(propsURI);
		final DBHandle handle = DBUtil.buildConnection(propsURI.toString(),props,false);
		System.out.println("\tdb:\t" + handle);
		final ArrayList<FixedFieldDef> origFieldDefs = readFieldDefs(new TrivialReader(fieldSpecURI,'\t',null,true,null, false));
		final ArrayList<FixedFieldDef> fieldDefs = notCoveredBySingles(origFieldDefs);
		try {
			handle.conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
		} catch (Exception ex) {
		}
		try {
			handle.conn.setAutoCommit(false);
		} catch (Exception ex) {
		}
		final TableControl tableControl = new TableControl(handle,props,tableName);
		final ArrayList<Iterable<BurstMap>> sources = new ArrayList<Iterable<BurstMap>>();
		for(int argi=firstSourceArg;argi<args.length;++argi) {
			final URI inURI = new URI(args[argi]);
			final Iterable<BurstMap> source = new FFReader(fieldDefs,inURI);
			sources.add(source);
		}
		for(final Iterable<BurstMap> source: sources) {
			System.out.println("\tscan source URI:\t" + source.toString());
			tableControl.scanForDefs(source.toString(),source, null);
		}
		tableControl.buildSQLStatements();
		tableControl.createTable(handle);
		final Random rand = new Random(42);
		long nInserted = 0;
		for(final Iterable<BurstMap> source: sources) {
			System.out.println("\tload source URI:\t" + source);
			final long nI = tableControl.loadData(source.toString(),now,rand,source, null, handle);
			System.out.println("\tinserted " + nI + " rows");
			nInserted += nI;
		}
		handle.conn.close();
		System.out.println("\tdone, wrote " + nInserted + " rows\t" + new Date());
		System.out.println("done LoadFFF\t" + new Date());
	}