private boolean add(ADD request){
		if(request.username.matches("^.*[^a-zA-Z0-9 ].*$"))
			return false;
		byte[] salt = new byte[AuthServer.saltLength];
		new SecureRandom().nextBytes(salt);
		String query_create = "INSERT INTO User values('" + request.username + "','" + request.name +
				"', 0x" + Misc.getHexBytes(Hash.getStretchedSHA256(request.userPW, salt, AuthServer.stretchLength), "") + 
				", 0x" + Misc.getHexBytes(salt, "") + ");";
		String query_history = "INSERT INTO History(length, lastLoginIndex, userName) values(" +
				"6"/*<<history length*/ + ", 0, '" + request.username + "');";
		
		try {
			if(connection == null)
				connect();
			connection.setAutoCommit(false);

			Statement stmt_create = connection.createStatement();
			Statement stmt_history = connection.createStatement();
			
			//System.out.println(query_create + "\n" +query_history);
			stmt_create.executeUpdate(query_create);
			stmt_history.executeUpdate(query_history);
			
			if(!makeAdmin(request.adminName, request.username))
				throw new SQLException();
			connection.commit();
			recordLogin(request.origin, request.username);
		} catch (SQLException e) {
			e.printStackTrace();
			if(connection != null){
				try {
					connection.rollback();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}
			return false;
		}finally{
			try {
				if(connection != null)
					connection.setAutoCommit(true);
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return true;
//		"INSERT INTO User values(" + userName + "," + name +
//				", 0x" + Misc.getHexBytes(stretchedPassword, "") + 
//				", 0x" + Misc.getHexBytes(salt, "") + ");"
		
//		"INSERT INTO History(length, lastLoginIndex, userName) values(" +
//				historyLength + ", 0, " + userName + ");"
	}