É o seguinte eu tenho um select que me dá vários valores.
publicstaticvoidmain(String[]args)throwsInstantiationException,IllegalAccessException,ClassNotFoundException,SQLException{Stringcaminho="C:/Programas/PTW/DiaSoft/DataBase/user.mdb";Driverd=(Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();Connectioncon=DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+caminho);Statementstm=con.createStatement();ResultSetrs=stm.executeQuery("SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = Id)))");if(rs.next()){Stringia=dapa.getString("ResumeNr");System.out.println("Resume"+ia);stm.executeQuery("SELECT MAX(D1) AS DAP1 FROM MeasData WHERE ParamNr = "+ia+"");stm.executeUpdate("SELECT MAX(D1)AS DAP1 FROM MeasData WHERE (ParamNr = "+ia+")");stm.executeQuery("SELECT MAX(D2) AS DAP2 FROM MeasData WHERE ParamNr = "+ia+"");stm.executeUpdate("SELECT MAX(D2) AS DAP2 FROM MeasData WHERE ParamNr = "+ia+"");stm.executeQuery("SELECT MAX(D3) AS DAP3 FROM MeasData WHERE ParamNr = "+ia+"");stm.executeUpdate("SELECT MAX(D3) AS DAP3 FROM MeasData WHERE ParamNr = "+ia+"");
Não se é a melhor maneira, ou mesmo se é possível, mas queria guardar o resultado do select do Resultset num vector, para entrar no if calcular os máximos do primeiro valor do select (ia), quando calcula-se o D3(ultimo) passava para o segundo e fazia o mesmo, até ao ultimo valor do select do Resultset.
Já agora outra questão como posso ver o valor de cada SELECT MAX???
O que pretendo era calcular os maximos de todos os parametros inseridos numa tabela, sendo o valor de todos esses parametros existentes retirados no primeiro select.
E queria ainda poder ver os resultados do calculo de todos os maximos.
Por exemplo, o primeiro select diz: 11, 12, 16, 23, 41
queria que calcula-se o maximo D1, D2 e D3 quando o Parametro é 11, e ver o resultado de D1, D2 e D3 calculado. Depois passava para o parametro 12 e fazia o mesmo, sempre assim…
Como posso fazer isso???
Obrigada
Bruck
Cara pelo que eu entendi sobre a sua duvida você quer pegar os resultados do ResultSet e jogar dentro de um vetor pra poder manipula-los mais facilmente, se for isso você pode fazer o seguinte:
publicstaticvoiddos()throwsSQLException{Stringcaminho="C:/user.mdb";try{Driverd=(Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();}catch(InstantiationExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalAccessExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(ClassNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}Connectioncon=DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+caminho);Statementstmt=con.createStatement();StringstrSql="SELECT Id FROM PatientData";ResultSetrs=stmt.executeQuery(strSql);while(rs.next()){Stringresid=rs.getString("Id");System.out.println("Id "+resid);while(resid!=null){StringDAP1="SELECT MAX(D1) AS V1 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd1=stmt.executeQuery(DAP1);Stringrd1=d1.getString("V1");System.out.println("M1 "+rd1);StringDAP2="SELECT MAX(D2) AS V2 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd2=stmt.executeQuery(DAP2);Stringrd2=d1.getString("V2");System.out.println("M2 "+rd2);}}}publicstaticvoidmain(String[]args){try{dos();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}
Fiz uma pequena alteração ao código, mas estou com o mesmo problema e não estou conseguindo resolver…
Consigo visualizar todos os Ids presentes na tabela da bd, mas não estou conseguindo efectuar o cálculo do máximo…dá erro dizendo “estado de cursor inválido”
Alguém me dá uma ajudinha???
Obrigada, e desculpem minha ignorância…
R
raghy
eu estava vendo uns executeUpdate…
com o uso de uns selects
acho que está errado, não… ?
é somente o executeQuery, para o select, certo?
e o proprio resutlado do select max, vai dar o máximo.
o erro nao esta no update… ?
Caso contrário poe para uma variavel e chama a variavel…
vou fazer uns testes aqui depois, mas por enquanto é isto
A
anamilagaia
Eu já estou conseguindo calcular os máximos, mas apenas para o primeiro Id!!! Após isso dá erro de Resultset is closed :?
packagemsi;importjava.sql.Array;importjava.sql.Connection;importjava.sql.Driver;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.Arrays;publicclassDAP{publicstaticvoiddosemetria()throwsSQLException{Stringcaminho="C:/user.mdb";try{Driverd=(Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();}catch(InstantiationExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(IllegalAccessExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(ClassNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}Connectioncon=DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+caminho);Statementstmt=con.createStatement();StringstrSql="SELECT Id FROM PatientData";ResultSetrs=null;rs=stmt.executeQuery(strSql);String[]vector=newString[16];ArrayList<String>resultados=newArrayList<String>();while(rs.next()){Stringresid=rs.getString("Id");if(resid!=null){resultados.add(resid);}for(Stringid:resultados){StringDAP1="SELECT MAX(D1) AS V1 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd1=stmt.executeQuery(DAP1);if(d1.next()){Stringrd1=d1.getString("V1");System.out.println("M1 "+rd1);vector[0]=rd1;System.out.println("1 "+vector[0]);}StringDAP2="SELECT MAX(D2) AS V2 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd2=stmt.executeQuery(DAP2);if(d2.next()){Stringrd2=d2.getString("V2");System.out.println("M2 "+rd2);vector[1]=rd2;System.out.println("2 "+vector[1]);}StringDAP3="SELECT MAX(D3) AS V3 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd3=stmt.executeQuery(DAP3);if(d3.next()){Stringrd3=d3.getString("V3");System.out.println("M3 "+rd3);vector[2]=rd3;System.out.println("3 "+vector[2]);}StringDAP4="SELECT MAX(D4) AS V4 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd4=stmt.executeQuery(DAP4);if(d4.next()){Stringrd4=d4.getString("V4");System.out.println("M4 "+rd4);vector[3]=rd4;System.out.println("4 "+vector[3]);}StringDAP5="SELECT MAX(D5) AS V5 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd5=stmt.executeQuery(DAP5);if(d5.next()){Stringrd5=d5.getString("V5");System.out.println("M5 "+rd5);vector[4]=rd5;System.out.println("5 "+vector[4]);}StringDAP6="SELECT MAX(D6) AS V6 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd6=stmt.executeQuery(DAP6);if(d6.next()){Stringrd6=d6.getString("V6");System.out.println("M6 "+rd6);vector[5]=rd6;System.out.println("6 "+vector[5]);}StringDAP7="SELECT MAX(D7) AS V7 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd7=stmt.executeQuery(DAP7);if(d7.next()){Stringrd7=d7.getString("V7");System.out.println("M7 "+rd7);vector[6]=rd7;System.out.println("7 "+vector[6]);}StringDAP8="SELECT MAX(D8) AS V8 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd8=stmt.executeQuery(DAP8);if(d8.next()){Stringrd8=d8.getString("V8");System.out.println("M8 "+rd8);vector[7]=rd8;System.out.println("8 "+vector[7]);}StringDAP9="SELECT MAX(D9) AS V9 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd9=stmt.executeQuery(DAP9);if(d9.next()){Stringrd9=d9.getString("V9");System.out.println("M9 "+rd9);vector[8]=rd9;System.out.println("9 "+vector[8]);}StringDAP10="SELECT MAX(D10) AS V10 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd10=stmt.executeQuery(DAP10);if(d10.next()){Stringrd10=d10.getString("V10");System.out.println("M10 "+rd10);vector[9]=rd10;System.out.println("10 "+vector[9]);}StringDAP11="SELECT MAX(D11) AS V11 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd11=stmt.executeQuery(DAP11);if(d11.next()){Stringrd11=d11.getString("V11");System.out.println("M11 "+rd11);vector[10]=rd11;System.out.println("11 "+vector[10]);}StringDAP12="SELECT MAX(D12) AS V12 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd12=stmt.executeQuery(DAP12);if(d12.next()){Stringrd12=d12.getString("V12");System.out.println("M12 "+rd12);vector[11]=rd12;System.out.println("12 "+vector[11]);}StringDAP13="SELECT MAX(D13) AS V13 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd13=stmt.executeQuery(DAP13);if(d13.next()){Stringrd13=d13.getString("V13");System.out.println("M13 "+rd13);vector[12]=rd13;System.out.println("13 "+vector[12]);}StringDAP14="SELECT MAX(D14) AS V14 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd14=stmt.executeQuery(DAP14);if(d14.next()){Stringrd14=d14.getString("V14");System.out.println("M14 "+rd14);vector[13]=rd14;System.out.println("14 "+vector[13]);}StringDAP15="SELECT MAX(D15) AS V15 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd15=stmt.executeQuery(DAP15);if(d15.next()){Stringrd15=d15.getString("V15");System.out.println("M15 "+rd15);vector[14]=rd15;System.out.println("15 "+vector[14]);}StringDAP16="SELECT MAX(D16) AS V16 FROM MeasData WHERE (ParamNr = (SELECT ParamNr FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))))";ResultSetd16=stmt.executeQuery(DAP16);if(d16.next()){Stringrd16=d16.getString("V16");System.out.println("M16 "+rd16);vector[15]=rd16;System.out.println("16 "+vector[15]);}Arrays.sort(vector);System.out.println("MAXIMO "+vector[15]);stmt.executeUpdate("UPDATE Parameter SET DAP = ("+vector[15]+") WHERE (ParamNr = (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"'))))");System.out.println("UPDATE Parameter SET DAP = ("+vector[15]+") WHERE (ParamNr = (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"'))))");}}ResultSetdf=stmt.executeQuery("SELECT DAP FROM Parameter WHERE ResumeNr IN (SELECT ResumeNr FROM ResumeData WHERE InfoNr IN (SELECT InfoNr FROM MeasInfo WHERE PatNr IN (SELECT PatNr FROM PatientData WHERE Id = '"+resid+"')))");if(df.next()){Stringdfim=df.getString("DAP");System.out.println("DAP "+dfim);stmt.executeUpdate("UPDATE PatientData SET [P Dose] = ("+dfim+") WHERE Id = '"+resid+"'");System.out.println("UPDATE PatientData SET [P Dose] = ("+dfim+") WHERE Id = '"+resid+"'");System.out.println("Actualização concluída");}}publicstaticvoidmain(String[]args){try{dos();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}