public ArrayList<Tilaus> haeToimitettavatTilaukset() throws DAOPoikkeus, SQLException {
		
		ArrayList<Tilaus> tilaukset = new ArrayList<Tilaus>();
		
		Asiakas asiakas = new Asiakas();
		
		ResultSet tulokset, asiakasTulokset, fantasiaTulokset;
		
		// Avataan yhteys
		Connection yhteys = avaaYhteys();
		
		// Alustetaan kysely
		String tilauksetSQL = "SELECT tilausID, asiakasID, kokonaisHinta, maksutapaID, toimitustapaID, pvm, lisatietoja FROM Tilaus WHERE paistettu = '1' AND toimitettu = '0' ORDER BY pvm ASC";
		String asiakasSQL = "SELECT nimi, email, puhnro, osoite, postinro, postitmp FROM Asiakas WHERE asiakasID = ?";
		String tilausrivitSQL = "SELECT TilauksenTuote.tilauksenTuoteID, TilauksenTuote.tuoteID, Koko.nimi, TilauksenTuote.kplmaara, TilauksenTuote.oregano, TilauksenTuote.valkosipuli, TilauksenTuote.laktoositon, TilauksenTuote.gluteeniton FROM TilauksenTuote INNER JOIN Koko ON TilauksenTuote.kokoID = Koko.kokoID WHERE tilausID = ?";
		String fantasiaSQL = "SELECT tayte1, tayte2, tayte3, tayte4 FROM TilauksenFantasia WHERE tilauksenTuoteID = ?";
		
		PreparedStatement tilauksetLause = yhteys.prepareStatement(tilauksetSQL);
		PreparedStatement asiakasLause = yhteys.prepareStatement(asiakasSQL);
		PreparedStatement tilausrivitLause = yhteys.prepareStatement(tilausrivitSQL);
		PreparedStatement fantasiaLause = yhteys.prepareStatement(fantasiaSQL);
		
		try {
			
			// Haetaan kaikki toimittamattomat tilaukset
			tulokset = tilauksetLause.executeQuery();
			
			while (tulokset.next()) {
				int tilausID = tulokset.getInt("tilausID");
				int asiakasID = tulokset.getInt("asiakasID");
				double kokonaisHinta = tulokset.getDouble("kokonaisHinta");
				int maksutapaID = tulokset.getInt("maksutapaID");
				int toimitustapaID = tulokset.getInt("toimitustapaID");
				String lisatiedot = tulokset.getString("lisatietoja");
				Date pvm = tulokset.getDate("pvm");
				
				// Haetaan jokaiseen tilaukseen asiakastiedot
				asiakasLause.setInt(1, asiakasID);
				asiakasTulokset = asiakasLause.executeQuery();
				
				while (asiakasTulokset.next()) {
					String nimi = asiakasTulokset.getString("nimi");
					String email = asiakasTulokset.getString("email");
					String puhnro = asiakasTulokset.getString("puhnro");
					String osoite = asiakasTulokset.getString("osoite");
					String postinro = asiakasTulokset.getString("postinro");
					String postitmp = asiakasTulokset.getString("postitmp");
					
					// Luodaan Asiakas-luokan olio.
					asiakas = new Asiakas(nimi, email, puhnro, osoite, postinro, postitmp);
				}
				
				// Tehdään näistä tilausolion ranka ja lisätään se listaan.
				Tilaus tilaus = new Tilaus(tilausID, asiakas, kokonaisHinta, pvm, toimitustapaID, maksutapaID, lisatiedot);
				tilaukset.add(tilaus);
			}
			
			// Tarvitaan tilauksiin vielä tilausrivit.
			for (int i = 0; i < tilaukset.size(); i++) {

				// Esitellään tilausrivit-lista.
				ArrayList<Tilausrivi> tilausrivit = new ArrayList<Tilausrivi>();
				
				// Asetetaan tilauksen numero tilausrivilauseeseen.
				tilausrivitLause.setInt(1, tilaukset.get(i).getTilausId());
				tulokset = tilausrivitLause.executeQuery();
				
				while (tulokset.next()) {
					int tilauksenTuoteID = tulokset.getInt("tilauksenTuoteID");
					int tuoteID = tulokset.getInt("tuoteID");
					String kokoStr = tulokset.getString("nimi");
					int kplmaara = tulokset.getInt("kplmaara");
					boolean oregano = tulokset.getBoolean("oregano");
					boolean valkosipuli = tulokset.getBoolean("valkosipuli");
					boolean laktoositon = tulokset.getBoolean("laktoositon");
					boolean gluteeniton = tulokset.getBoolean("gluteeniton");
					
					// Haetaan tuotteen tiedot ID:llä kannasta samalla
					TuoteDAO tDao = new TuoteDAO();
					Tuote tuote = tDao.haeTuote(tuoteID);
					Pizza pizza = tDao.haePizza(tuoteID); // täytteiden vuoksi
					
					
					// Jos haettu tuote on Fantasiapizza, haetaan tietokannasta
					// vielä sinne tallennetut fantasian täytteet.
					if (tuote.getNimi().equals("Fantasia")) {
						fantasiaLause.setInt(1, tilauksenTuoteID);
						fantasiaTulokset = fantasiaLause.executeQuery();
						
						while (fantasiaTulokset.next()) {
							int tayte1 = fantasiaTulokset.getInt("tayte1");
							int tayte2 = fantasiaTulokset.getInt("tayte2");
							int tayte3 = fantasiaTulokset.getInt("tayte3");
							int tayte4 = fantasiaTulokset.getInt("tayte4");
							
							TayteDAO tayteDao = new TayteDAO();
							ArrayList<Tayte> fantasiataytteet = tayteDao.haeFantasiaTaytteet(tayte1, tayte2, tayte3, tayte4);
							pizza.setTaytteet(fantasiataytteet);
						}
					}
					
					// Lisätään tilausrivi listaan.
					Tilausrivi tilausrivi = new Tilausrivi(tilauksenTuoteID, tuote, pizza, kokoStr, kplmaara, oregano, valkosipuli, laktoositon, gluteeniton);
					tilausrivit.add(tilausrivi);
				}
				
				// Lisätään tilauksen rivit tilaukseen.
				tilaukset.get(i).setTilausrivit(tilausrivit);
			}
			
		} catch(DAOPoikkeus e) {
			throw new DAOPoikkeus("Tilaustietojen haku aiheutti virheen!", e);
		} finally {
			// Lopuksi aina suljetaan yhteys!
			suljeYhteys(yhteys);
		}

		return tilaukset;
	}