ResultSet

Olá galera, estou com um problema no java, estou utilizando a varreduar next e previous da classe ResultSet, coloquei no modo sensível e somente leitura, porém quando atualizo e deleto, ele detecta a modificação na varredura, mas no insert não, o que pode estar acontecendo, to dando comit no insert, update e delete.

Classe Delete:

import java.sql.*;

import javax.swing.JOptionPane;


public class Deletar {
	Connection con = new Conexao().getConection();
	private int codPed;
	public Deletar(String cp) {
		codPed = Integer.parseInt(cp);
		apagarPedidos();
	}
	
	public void apagarPedidos() {
		try {
			Statement comando = con.createStatement();
			comando.executeUpdate("Delete tab03PEDIDO where cod_pedido= "+codPed);
			 InterfacePedidos.tPed.setText("");
			 InterfacePedidos.tPlaca.setText("");
			 InterfacePedidos.tFuncionario.setText("");
			 InterfacePedidos.area.setText("");
			JOptionPane.showMessageDialog(null, "Registro apagado com suceso!");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Classe Inserir:


import java.sql.*;
import java.math.*;

import javax.swing.JOptionPane;

public class Inserir {
	Connection con = new Conexao().getConection();
	ResultSet resultado;
	private String  placa, obs;
	private int codPed, codFunc;
	
	public Inserir(String cp,String p,String cf,String a) {
		codPed = Integer.parseInt(cp);
		placa = p;
		codFunc = Integer.parseInt(cf);
		obs = a;
		inserirPedidos();
	}
	
	public void inserirPedidos() {
		try {
			
			Statement comando = con.createStatement();
			
			comando.executeUpdate("Insert into tab03Pedido(cod_pedido,placa,cod_func,obs) " +
					"values(" + codPed +",'"+ placa+"',"+ codFunc +",'" + obs+"')");
			InterfacePedidos.tPed.setText("");
			 InterfacePedidos.tPlaca.setText("");
			 InterfacePedidos.tFuncionario.setText("");
			 InterfacePedidos.area.setText("");
			JOptionPane.showMessageDialog(null, "Registro inserido com suceso!");
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(null,"Dados Inválidos");
		}
		
	}
	
	
}

Classe alterar:

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;


public class Alterar {
	Connection con = new Conexao().getConection();
	private String  placa, obs;
	private int codPed, codFunc;
	public Alterar(String cp,String p,String cf,String a) {
		codPed = Integer.parseInt(cp);
		placa = p;
		codFunc = Integer.parseInt(cf);
		obs = a;
		alterarPedidos();
	}
	
	public void alterarPedidos() {
		try {
			Statement comando = con.createStatement();
			comando.executeUpdate("Update tab03PEDIDO set placa = '" +placa+"',cod_func = " + codFunc + ",obs ='"+obs+"' where cod_pedido = " + codPed);
			InterfacePedidos.tPed.setText("");
			 InterfacePedidos.tPlaca.setText("");
			 InterfacePedidos.tFuncionario.setText("");
			 InterfacePedidos.area.setText("");
			JOptionPane.showMessageDialog(null, "Registro alterado com suceso!");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

Classe Avancar:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;


public class Avancar {
	private ResultSet resultado;
	Statement comando;
	int rows;
	
	public Avancar(Connection con) {
		
		try {
			comando = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
			resultado = comando.executeQuery("Select * from tab03PEDIDO");
			resultado.beforeFirst();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public int avancarPedido() {
		try {
			
				if(!resultado.wasNull()) {
					resultado.absolute(InterfacePedidos.linha);
					resultado.next();
					InterfacePedidos.tPed.setText(String.valueOf(resultado.getInt("cod_Pedido")));
					InterfacePedidos.tPlaca.setText(resultado.getString("placa"));
					InterfacePedidos.tFuncionario.setText(String.valueOf(resultado.getInt("cod_func")));
					InterfacePedidos.area.setText(resultado.getString("obs"));	
					rows = resultado.getRow();
					System.out.println("Row: " + rows);
					
				}
			
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(null,"Registro Inválido");
			
		}
	
	return rows;
	}
	public void fechar() {
		try {
			comando.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

Classe Retroceder:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;


public class Retroceder {

	private ResultSet resultado;
	
	Statement comando;
	int rows;
	
	public Retroceder(Connection con) {
		
		try {
			comando = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
			resultado = comando.executeQuery("Select * from tab03PEDIDO");
			resultado.afterLast();
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public int retrocederPedido() {
		try {
	
				
			
				if(!resultado.wasNull()) {
					resultado.absolute(InterfacePedidos.linha);
					resultado.previous();
					InterfacePedidos.tPed.setText(String.valueOf(resultado.getInt("cod_Pedido")));
					InterfacePedidos.tPlaca.setText(resultado.getString("placa"));
					InterfacePedidos.tFuncionario.setText(String.valueOf(resultado.getInt("cod_func")));
					InterfacePedidos.area.setText(resultado.getString("obs"));	
					rows = resultado.getRow();
					
				}
				else{
					System.out.println("Erro no retrocesso");
				}
			
			
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(null,"Registro Inválido");
			
		}
		
		return rows;
	
	}
	public void fechar() {
		try {
			comando.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
}

abraço,

Dê uma olhada nesta página:

http://msdn.microsoft.com/pt-br/library/ms378405.aspx

Eu sei, eu sei, eu sei, você provavelmente não está usando o SQL Server, mas essa tabela grande indica exatamente que, com essa combinação de flags, você consegue enxergar as atualizações e deleções, mas não as inserções. O comportamento não é muito diferente para outros bancos.
O pior é que mesmo usando CONCUR_UPDATABLE as inserções ainda não são visíveis !

No caso específico do SQL Server, você pode usar uma constante específica do SQL Server ( TYPE_SS_SCROLL_DYNAMIC ) que permite enxergar as inserções também. Veja nessa mesma página.

Vish,

Estou usando absolute e quando coloquei o (TYPE_SS_SCROLL_DYNAMIC) deu erro no meu código, o que eu devo fazer?!

abraço,

Ok, estou utilizando o

con.createStatement(SQLServerResultSet.TYPE_SS_SCROLL_DYNAMIC,ResultSet.CONCUR_UPDATABLE);

no lugar do ResultSet essa classe SQLServerResultSet tem algum método para eu colocar no lugar do ResultSet.absolute(); ou como eu faria para andar registro a registro, pois quando dou ResultSet.previous() ele não retorna mais para o ResultSet.next(), dá a exceção de SQLException, o que eu faço?!