Boa tarde a todos. Estou tentando criar uma aplicação simples que vai receber valores numa página chamada “login.jsp” e nela o usuário vai selecionar em dois campos select´s uma classe e um bimestre, como mostrado abaixo:
login.jsp
//aqui em cima a conexão com o banco esta OK.
<!-- colocar o select aqui e pegar valor dele e listar as classes pelo Listar -->
<div class="container">
<div class="col-xs-4 col-sm-4 col-lg-4 p-1 mb-2 bg-white border border-1 border-secondary rounded float-start">
<h2>Selecione abaixo a classe para lançamentos das notas e faltas</h2>
<br>
</div>
<div class="col-xs-4 col-sm-4 col-lg-4 p-1 mb-2 bg-white border border-1 border-secondary rounded float-start">
<form method="post" action="abrirClasse.jsp">
<select class="form-select form-select-sm" name="classe">
<option value="" enabled>Selecione a classe</option>
<option value="1º ANO A" >1º ANO A</option>
<option value="1º ANO B" >1º ANO B</option>
<option value="2º ANO A" >2º ANO A</option>
<option value="2º ANO B" >2º ANO B</option>
<option value="3º ANO A" >3º ANO A</option>
<option value="3º ANO B" >3º ANO B</option>
<option value="3º ANO C" >3º ANO C</option>
<option value="4º ANO A" >4º ANO A</option>
<option value="4º ANO B" >4º ANO B</option>
<option value="5º ANO A" >5º ANO A</option>
<option value="5º ANO B" >5º ANO B</option>
</select>
<br><br>
<select class="form-select form-select-sm" name="bimestre">
<option value="" enabled>Selecione o Bimestre</option>
<option value="1º BIMESTRE">1º BIMESTRE</option>
<option value="2º BIMESTRE">2º BIMESTRE</option>
<option value="3º BIMESTRE">3º BIMESTRE</option>
<option value="4º BIMESTRE">4º BIMESTRE</option>
<option value="5º CONCEITO">5º CONCEITO</option>
</select>
<br><br>
<div class="text-center">
<input class="btn btn-success w-100" name ="listar" id="listar" type="submit" value="Listar Alunos">
</div>
</form>
<br>
</div>
</div>
Depois disso vai para a outra página chamada “abrirClasse.jsp” que recebe a classe selecionada acima e o bimestre pelos select´s. E com essas informações ele pega do banco alunos e cria uma TABELA HTML com inputs em cada disciplina, como esta no abaixo:
abrirClasse.jsp
<%
try
{//inicio try
if(rs.next() == false){//inicio if
response.sendRedirect("erro2.html");
}//fim if
else //VER COMO SALVAR TUDO AO MESMO TEMPO NO BANCO DEPOIS DE CLICAR NO SALVAR
{//inicio else
out.println("<h2 class='text-center'>Classe: <strong>"+classe+"</strong>   <strong>"+bimestre+".</strong></h2>");
out.println("<br>");
%>
<!-- AQUI TEM DE CRIAR UMA TABELA, CABEÇALHO ANTES E COLOCAR ESSA PARTE DO BANCO LOGO EM SEGUIDA -->
<form method="post" class="form-control" action="salvarNotas.jsp">
<!--<input type="hidden" name="id" size="30" required value="<% //rs.getInt(1); %>"/>-->
<table id="notas" name="notas" class="border border-dark table text-nowrap table-bordered table-sm table-success table-striped">
<tr><th></th><th></th><th>Disciplinas</th><th id="Português">Português</th><th id="História">História</th><th id="Geografia">Geografia</th><th id="Ciências">Ciências</th>
<th id="Matemática">Matemática</th><th id="Ed. Física">Ed. Física</th><th id="Ed. Artística">Ed. Artística</th><th id="Inglês">Inglês</th><th id="Prod. Textual">Prod. Textual</th>
<th id="Exp. Matemática">Exp. Matemática</th><th></th></tr>
<tr><th>Id Aluno</th><th>Nº Cl.</th><th>Nomes</th><th>Conceito</th><th>Conceito</th>
<th>Conceito</th><th>Conceito</th><th>Conceito</th><th>Conceito</th>
<th>Conceito</th><th>Conceito</th><th>Conceito</th><th>Conceito</th><th>Faltas</th></tr><%
do
{ //inicio do %>
<tr><td id="idAluno" name="idAluno" class="text-center"><%= rs.getInt(1) %></td>
<td id="quant" class="text-center"><%= i+=1 %></td>
<td><%= rs.getString(2) %></td>
<td><input class="form-control" type="text" id="notaPort" name="notaPort" /></td>
<td><input class="form-control" type="text" id="notaHist" name="notaHist" /></td>
<td><input class="form-control" type="text" id="notaGeo" name="notaGeo" /></td>
<td><input class="form-control" type="text" id="notaCien" name="notaCien" /></td>
<td><input class="form-control" type="text" id="notaMat" name="notaMat" /></td>
<td><input class="form-control" type="text" id="notaEdFis" name="notaEdFis" /></td>
<td><input class="form-control" type="text" id="notaEdArt" name="notaEdArt" /></td>
<td><input class="form-control" type="text" id="notaIng" name="notaIng" /></td>
<td><input class="form-control" type="text" id="notaProdT" name="notaProdT" /></td>
<td><input class="form-control" type="text" id="notaExpM" name="notaExpM" /></td>
<td><input class="form-control" type="text" id="faltas" name="faltas" /></td></tr>
<%}/*fim do*/ while(rs.next());
}//fim else %>
</table>
<div class="row">
<input class="btn btn-success w-100" type="submit" value="Salvar">
</div>
</form>
<%}//fim try
catch(Exception e)
{
e.getStackTrace();
}
%>
E depois que o usuário terminar de lançar notas e clicar no botão “SALVAR” ele vai inserir no banco no arquivo “salvarNotas.jsp” que segue e onde vou falar quais as minhas dúvidas:
salvarNotas.jsp
String quant = request.getParameter("quant");
int quantidade = Integer.parseInt("quant");
out.println("<br>");
out.println("<br>");
out.println("<h3>Elementos em numero de alunos: " + quantidade + "</h2>");
/*
String bimestre = request.getParameter("bimestre");
String port = request.getParameter("Português");
String hist = request.getParameter("História");
String geo = request.getParameter("Geografia");
String cien = request.getParameter("Ciências");
String mat = request.getParameter("Matemática");
String edfis = request.getParameter("Ed. Física");
String edart = request.getParameter("Ed. Artística");
String ing = request.getParameter("Inglês");
String prodT = request.getParameter("Prod. Textual");
String expM = request.getParameter("Exp. Matemática");
String[] idAluno = request.getParameterValues("idAluno");
String[] notaPort = request.getParameterValues("notaPort");
String[] notaHist = request.getParameterValues("notaHist");
String[] notaGeo = request.getParameterValues("notaGeo");
String[] notaCien = request.getParameterValues("notaCien");
String[] notaMat = request.getParameterValues("notaMat");
String[] notaEdFis = request.getParameterValues("notaEdFis");
String[] notaEdArt = request.getParameterValues("notaEdArt");
String[] notaIng = request.getParameterValues("notaIng");
String[] notaProdT = request.getParameterValues("notaProdT");
String[] notaExpM = request.getParameterValues("notaExpM");
String[] faltas = request.getParameterValues("faltas");
try{
Connection con = null;
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projetoescola?useTimezone=true&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false", "root", "root");//?useTimezone=true&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
String sql = "INSERT INTO 'notas' ('conceitos', 'faltas', 'bimestre', 'disciplina', 'FK_idAluno') VALUES (?, ?, ?, ?, ?);";
PreparedStatement pst = con.prepareStatement(sql);
for(int i = 0; i < quantidade; i++){
pst.setString(1, notaPort[i]);
pst.setString(4, port);
pst.setString(1, notaHist[i]);
pst.setString(4, hist);
pst.setString(1, notaGeo[i]);
pst.setString(4, geo);
pst.setString(1, notaCien[i]);
pst.setString(4, cien);
pst.setString(1, notaMat[i]);
pst.setString(4, mat);
pst.setString(1, notaEdFis[i]);
pst.setString(4, edfis);
pst.setString(1, notaIng[i]);
pst.setString(4, ing);
pst.setString(1, notaEdArt[i]);
pst.setString(4, edart);
pst.setString(1, notaProdT[i]);
pst.setString(4, prodT);
pst.setString(1, notaExpM[i]);
pst.setString(4, expM);
pst.setString(2, faltas[i]);
pst.setString(3, bimestre);
pst.setString(5, idAluno[i]);
pst.addBatch();
}
pst.executeBatch();
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String erro = sw.toString(); //Aqui obtenho a String
out.println("Erro ao cadastrar" + erro);
//e.printStackTrace();
//response.sendRedirect( "erro.html?excecao=" + URLEncoder. encode(e, "ISO-8859-1"));
} */
%>
Esta comentado o trecho que esta com problema.
Minhas dúvidas:
1º Eu preciso que o if do salvarNotas.jsp percorrra a tabela toda no seu tamanho para que p pst…addBatch possa ir fazendo sua parte. De cara da erro de nullpointer. Não estou conseguindo recuperar ali na tabela do arbriClasse.jsp (<td id="quant" class="text-center"><%= i+=1 %></td>
) e conveter de String para inteiro (nem com Integer nem com int).
2º Depois que isso resolver, eu também tenho campos no banco que são inteiros e vem das páginas String. É possível resolver isso, antes de guardar no banco? Converter o que veio String para int e depois popular o banco?
3º A melhor maneira de salvar multiplas linhas da tabela no banco é como addBatch()? Teria um outro modo, sem precisar colocar no fim de cada linha da tabela, um salvar?
Se não fui claro, posso me explicar melhor depois. Obrigado desde já.