Problema ao usar JDBC para realizar consulta após executar um INSERT
5 respostas
Naruffy
Tenho o seguinte problema, eu realizo um INSERT, e logo após este eu realizo um SELECT, estea consulta é ordenado por um ORDER BY, se eu pegar esta consulta e executar direto na SQL Server ela vem correta, porém se eu executo pelas classe do JDBC o ultimo e o penultimo registro veem trocados. Mas isso só acontece quando a consulta é realizada após a inserção. Já troque a classe ResultSet pela por com.sun.rowset.CachedRowSetImpl e também ocorreu o mesmo problema, será um bug no JDBC?
as vezes está pela coluna errada… como uma seguence… por exemplo
pboechat
Fiz um teste tolo, com uma base simples, SQL Server 2005 e jTDS 2.0.10. Não consegui simular o erro. Minha suspeita recai agora sobre seu SQL, como mencionado pelo usuário “Focão”.
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;publicclassMain{/** * @param args */privatestaticvoidprintUsuarioTable()throwsSQLException{Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select codigo from dbo.usuario order by 1");System.out.println("*****************");System.out.println("printing dbo.USUARIO");System.out.println("*****************");while(rs.next()){System.out.print(" - codigo : "+rs.getInt(1)+" / ");}rs.close();stmt.close();}privatestaticIntegergetLastCodigoUsuario()throwsSQLException{Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select max(codigo) from dbo.usuario");IntegerlastCodigoUsuario=null;if(rs.next()){lastCodigoUsuario=rs.getInt(1);}rs.close();stmt.close();return(lastCodigoUsuario==null)?0:lastCodigoUsuario;}privatestaticConnectionconn;publicstaticvoidmain(String[]args){try{Class.forName("net.sourceforge.jtds.jdbc.Driver");conn=DriverManager.getConnection("jdbc:jtds:sqlserver://xxx:1433/xxx","xxx","xxx");printUsuarioTable();System.out.println("*****************");System.out.println("inserting into dbo.USUARIO");System.out.println("*****************");Statementstmt=conn.createStatement();stmt.execute("insert into dbo.usuario values ("+(getLastCodigoUsuario()+1)+", 1)");stmt.close();printUsuarioTable();conn.close();}catch(ClassNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}catch(SQLExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}}