JDBC problemas utilizando batch e ResultSet()

Bom dia caro amigos do guj, estou com um probleminha e gostaria de saber se alguém pode me ajudar.

Eu tenho um banco ODBC, e nele está contido 4 tabelas. Eu gostaria de ter uma idéia de como faço para acessa-las e trocar informaçoes simultaneas ? Eu estive pesquisando e , utilizar batch não vai funcionar. Por causa do seguinte.

vou da um exemplo: tenho a tabela Produtor, e uma tabela Propriedade.

Eu preciso ir em produtor e checar se o “nome_produtor” da tabela Produtor é o mesmo de " nome_proprietario_imovel_principal " da tabela Propriedade, e se for , eu preciso jogar o dado na outra tabela chamada “FRENTE” no campo ID_PROD.

Vocês me entenderam ?

O problema que eu acho é o seguinte:

se eu utilizo o PreparedStatement() para o select nome_produtor FROM Produtor;

e dpois utilizo um

Produtor.setNome(rs.getString(1));

eu terei que fz outro preparedStatment para da o outro select em Propriedade?

e como irei comparar o outro dado ? outro ResultSet() ? … Gostaria que alguém pudesse me ajudar.

Ficarei muito grato.

Pq vc não fas as 2 consultas e a comparação em uma unica consulta???

Se você puder me ajudar, vou te colocar um trecho para você ter uma idéia da minha dúvida.

é essa ó:


try {
			
			Produtor produtor = new Produtor();
			
			PreparedStatement Pstmt1 = this.conexao.prepareStatement("SELECT nome_produtor FROM produtor WHERE cod_produtor = 10");
			
			ResultSet rs = Pstmt1.executeQuery();
			
			while(rs.next()){
			
			produtor.setNomeProdutor(rs.getString(1));
			
			
			}
			PreparedStatement Pstmt2 = this.conexao.prepareStatement("SELECT nome_proprietario_imovel_principal FROM Propriedade WHERE cod_produtor = 10");
				
			rs = Pstmt2.executeQuery();
			
			while(rs.next()){
				
				String nome = rs.getString(1);
				
			if (nome.equals(produtor.getNomeProdutor())) {
								
				System.out.println(produtor.getNomeProdutor());
			}
				
			}
			
			Pstmt1.close();
			Pstmt2.close();
			
			

agradeço se puder ajudar =D e me da uma luz.

mi fala uma coisa, é o mesmo nome tanto do proprietario quanto do produtor? só estão em tabels diferentes??

Correto. quantidade é a mesma. Na verdade a verificação é apenas para saber se é o mesmo nome, se for eu irei colocar um valor " 1 " em outra tabela, se não for, eu coloco o valor 2. O problema é que, eu tenho várias verificações desse tipo, essa é a apenas um exemplo. eu vou ter que verificar terreno, verificar estado, essas coisas, e todas caem no mesmo conceito. Ou seja, eu estou tendo que utilizar milhares de PreparedStatements, milhares de ResultSets() … entendeu?

aqui um trecho do que eu to tentando fazer.


try {
			
			Produtor produtor = new Produtor();
			
			PreparedStatement Pstmt1 = this.conexao.prepareStatement("SELECT nome_produtor FROM produtor WHERE cod_produtor = 10");
			
			ResultSet rs = Pstmt1.executeQuery();
			
			while(rs.next()){
			
			produtor.setNomeProdutor(rs.getString(1));
			
			
			}
			PreparedStatement Pstmt2 = this.conexao.prepareStatement("SELECT nome_proprietario_imovel_principal FROM Propriedade WHERE cod_produtor = 10");
				
			rs = Pstmt2.executeQuery();
			
			while(rs.next()){
				
				String nome = rs.getString(1);
				
			if (nome.equals(produtor.getNomeProdutor())) {
				
				Pstmt2 = this.conexao.prepareStatement("INSERT INTO FRENTE(CHAVE,ID_PRO) VALUES(?,?)");
				
				Pstmt2.setString(1, "700.000");
				Pstmt2.setString(2, "1" );
				Pstmt2.execute();
				
				
				//System.out.println(produtor.getNomeProdutor());
			}
				
			}
			
			Pstmt1.close();
			Pstmt2.close();
			
		

select nome_produtor, nome_proprietario_imovel_principal FROM produtor prod, proprietario prop WHERE prod.cod_produtor=10

depois vc fais a verificação, se nescessário armazena os nomes em variaveis diferentes e compara o valor delas

qualquer coisa só fala

Show de bola. Quem sabe sabe ! Agradeço ae a ajuda. Vou ver oq consigo fazer hoje. Obrigado ae Wiliam. abraços.

Estou com outro problema, envolvendo a mesma classe.

é o seguinte.

o método está assim

public void insereDados(ConexaoDAO conexao) {

		try {

			Produtor produtor = new Produtor();

			PreparedStatement Pstmt1 = this.conexao
					.prepareStatement("SELECT nome_produtor,nome_proprietario_imovel_principal FROM Produtor prod,Propriedade prop WHERE prod.cod_produtor < 10 AND prop.cod_produtor < 10");

			ResultSet rs = Pstmt1.executeQuery();
            
			int chave = 700000;
			while (rs.next()) {

				produtor.setNomeProdutor(rs.getString(1));

			//	String nome = rs.getString(2);
				
				if (rs.getString(2) == null){
				PreparedStatement Pstmt2 = this.conexao.prepareStatement("INSERT INTO Propriedade(nome_proprietario_imovel_principal) VALUES(' ')");
								
				Pstmt2.execute();
				
				}
												
					if (rs.getString(2).equals(produtor.getNomeProdutor())) {

						Pstmt1 = this.conexao
								.prepareStatement("INSERT INTO FRENTE(CHAVE,ID_PRO) VALUES(?,?)");

						Pstmt1.setString(1, Integer.toString(chave));
						Pstmt1.setString(2, "1");
						Pstmt1.execute();

					}else {
																
						Pstmt1.setString(1, Integer.toString(chave));
						Pstmt1.setString(2, "2");
						Pstmt1.execute();
						
					
					}
				    
				
				

				chave++;
				
			}
			// PreparedStatement Pstmt2 =
			// this.conexao.prepareStatement("SELECT nome_proprietario_imovel_principal FROM Propriedade WHERE cod_produtor = 10");

			// rs = Pstmt2.executeQuery();

			// while(rs.next()){

			// String nome = rs.getString(1);

			// if (nome.equals(produtor.getNomeProdutor())) {

			// Pstmt2 =
			// this.conexao.prepareStatement("INSERT INTO FRENTE(CHAVE,ID_PRO) VALUES(?,?)");

			// Pstmt2.setString(1, "700.000");
			// Pstmt2.setString(2, "1" );
			// Pstmt2.execute();

			// System.out.println(produtor.getNomeProdutor());
			// }

			// }

			Pstmt1.close();
			// Pstmt2.close();

		} catch (SQLException e) {

			e.printStackTrace();
		}

	}

e o problema que da

é que para na verificação do " null "

programa não continua .

:frowning:

alguem para ajudar ?