How to get specific values from select menu and use her in mysql query?

69 views Asked by At

In my jsp page i have select menu which shows parts of List:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="test.Obiekt"%>
<%@ page import="test.ListaObiektow"%>
<%@ page import="test.Termin"%>
<%@ page import="test.ListaTerminow"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>menu główne</title>

<meta name="viewport" content="initial-scale=1, maximum-scale=1">


<meta name="android-mobile-web-app-capable" content="yes">
<meta name="android-mobile-web-app-status-bar-style" content="black">

<link href="css/ratchet.css" rel="stylesheet">
<link href="css/ratchet-theme-android.css" rel="stylesheet">


<script src="js/ratchet.js"></script>

</head>
<body>
    </br>
    </br>
    </br>
    <header class="bar bar-nav">
        <a class="icon icon-left-nav pull-left" href="wyszukaj.jsp"></a>
        <h1 class="title">Wybierz obiekt</h1>
    </header>

    <div id="content">
        <div class="tabelawybor">

            <b>Wybierz obiekt:</b>
            <%
                List<Obiekt> list = new ListaObiektow().getObiekty();
            %>
            <select name="obiekt">
                <option selected value="default"></option>
                <%
                    for (Obiekt obiekt : list) {
                %>
                <option value="<%=obiekt.idObiekt%>"><%=obiekt.nazwa%>
                    <%=obiekt.adres%></option>
                <%
                    }
                %>

            </select>
        </div>

        <div class="tabelawybor">
            <td><b>Wpisz liczbę uczestników:</b><input type="text"
                name="uczest" /></td>
        </div>


        <%
            List<Termin> lista = new ListaTerminow().getTerminy();
        %>
        <div class="tabelawybor">
            <table class="center">

                <tr>
                    <td>Nazwa obiektu:</td>
                    <td>Data:</td>
                    <td>Godzina</br> rozpoczęcia:
                    </td>
                    <td>Godzina</br> zakończenia:
                    </td>
                    <td></td>
                </tr>
                <%
                    for (Termin termin : lista) {
                %>
                <tr>
                    <td><%=termin.nazwaObiektu%> <%=termin.adresObiektu%></td>
                    <td><%=termin.dzien%></td>
                    <td><%=termin.odKtorej%></td>
                    <td><%=termin.doKtorej%></td>
                    <td><form action="Rezerwuj" method="post"><button class="btn btn-primary">Zarezerwuj</button></form></td>
                </tr>
                <%
                    }
                %>
            </table>
        </div>
    </div>


</body>
</html>

Under this select menu, there is a table which should show all Terms for specific obiekt.IdObiekt.

Here is ListOfTerms class code:

package test;

import test.ConnectionClass;
import test.ListaObiektow;
import test.Obiekt;

import java.sql.*;
import java.util.ArrayList;
import test.ListaObiektow;
public class ListaTerminow {
    Connection conn;
    public ListaTerminow() throws SQLException
    {
        conn = ConnectionClass.Polacz();
    }

    public ArrayList<Termin> getTerminy() throws SQLException, ClassNotFoundException
    {
        ArrayList<Termin> terminy = new ArrayList<Termin>();

        Statement st = null;

        ResultSet rs = null;

        String query = "SELECT obiekty.nazwa,obiekty.adres, termin.dzien, termin.odKtorej, termin.doKtorej FROM termin LEFT JOIN obiekty ON termin.idObiekt = obiekty.idObiekt WHERE termin.czyZajety = false AND obiekty.id=?";

        st = conn.createStatement();

        rs = st.executeQuery(query);

        while(rs.next())
        {
            Termin termin = new Termin();
            termin.setNazwaObiektu(rs.getString(1));
            termin.setAdresObiektu(rs.getString(2));
            termin.setDzien(rs.getDate(3));
            termin.setOdKtorej(rs.getString(4));
            termin.setDoKtorej(rs.getString(5));
            terminy.add(termin);
        }
        return terminy;
    }
}

I don't know how to get obiekt.idObiekt of SELECTED obiekt in select menu and use it in this query:

SELECT obiekty.nazwa,obiekty.adres, termin.dzien, termin.odKtorej, termin.doKtorej FROM termin LEFT JOIN obiekty ON termin.idObiekt = obiekty.idObiekt WHERE termin.czyZajety = false AND obiekty.id=?
1

There are 1 answers

0
Vogel612 On BEST ANSWER

Instead of using a Statement, you should use a PreparedStatement

What you'll need to do is send the obiekty.id in a request to your server (more info here) and then put it into the Prepared statement as follows:

try (PreparedStatement st = conn.prepareStatement(query)) {
    st.setLong(1, obiekty.id);
    ResultSet rs = st.executeQuery();
    // iterate over result set
} catch (SQLException ex) {
   // sensible handling!
}