public void execute(Connection conn) {
		try {
			PreparedStatement s = conn.prepareStatement(query);
			if (params != null) {
				for (ISetter setter : params) {
					s = setter.set(s);
				}
			}
			for (PreparedStatementExecutionItem ei : executionItems)
				s = ei.addToBatch(s);
			if (query.toLowerCase().startsWith("select")) {
				resultSet = s.executeQuery();
			} else {
				if (executionItems.isEmpty())
					s.execute();
				else
					s.executeBatch();
				s.close();
			}
		}
		catch (SQLException e) {
			System.err.println("===> Batch start");
			this.print();
			for (PreparedStatementExecutionItem ei : this.executionItems)
				ei.print();
			System.err.println("===> Batch end");
			e.printStackTrace();
		}
		for (PreparedStatementExecutionItem ei : executionItems)
			ei.wasExecuted = true;
		wasExecuted = true;
	}