Driver's JDBC

3 respostas
R

Ae gente eu to com umas dúvidas aqui.

Bom primeiro eu queria saber mais sobre os JDBC mas não achei muita coisa. Se tiverem material me passem.
Bom minha dúvida principal é quanto aos PreparedStatement, BatchStatement e o Statement. Desculpem qualquer erro de nome…

Bom sei que o Statement é rodado 1 por 1, pode acontecer se não for tratado corretamente de ter um sql injection pois para criar esta query vc usaria concatenação de string’s, é um metodo para inserir query’s uma a uma. Sendo este metodo mais lento na inserção do que os outros 2.

Já o PreparedStatement ele pré-processa a query o que isso significa ?
Que ele irá processar o custo da query, montar ela de uma forma mais efetiva e repassa para o banco algo já mastigado só com os valores e o banco não necessita fazer um peso para ver qual o caminho melhor para processar minha query, Mas nesse caso a validação da query fica a encargo do driver também ? Se for isso então isso tudo quem deve ser responsável é o Driver e não o banco ?

E o BatchStatement quando eu rodo várias query’s mas não do o execute, ele esta guardado tudo no Driver para depois ser passado tudo para o banco de dados como uma grande sequencia de query’s a serem executadas ?

E quanto ao Driver em questão. Ele irá somente fazer o papel de criar a conexão e repassar as query’s para o banco, e o banco em questão irá tratar de otimiza-las e tudo e responder ao driver, ou o driver faz alguma otimização em minhas query’s e repassa ao banco de dados algo já pré-processado, e em cima disso o banco de dados irá fazer a validação e quebrar em várias sub-query’s e executa-las ?

São várias dúvidas…

Me corrigam se tiver algo errado alem do portugues plz.

3 Respostas

T

rommul:
Ae gente eu to com umas dúvidas aqui.

Bom primeiro eu queria saber mais sobre os JDBC mas não achei muita coisa. Se tiverem material me passem.
Bom minha dúvida principal é quanto aos PreparedStatement, BatchStatement e o Statement. Desculpem qualquer erro de nome…

Bom sei que o Statement é rodado 1 por 1, pode acontecer se não for tratado corretamente de ter um sql injection pois para criar esta query vc usaria concatenação de string’s, é um metodo para inserir query’s uma a uma. Sendo este metodo mais lento na inserção do que os outros 2.


OK

Hum… a rigor o que ocorre é que o driver monta um comando SQL em um formato que depende do banco de dados com o qual ele se comunica, e passa os parâmetros normalmente em formato binário (tanto é que normalmente não é possível obter a string SQL equivalente ao comando SQL). Ele repassa em formato mastigado (OK), manda só os valores (OK), mas a otimização da query SQL é uma outra coisa que só o próprio banco tem condições de fazer, já que é só ele que tem acesso às estatísticas do banco de dados.
De qualquer maneira, um prepared statement é benéfico em termos de desempenho, porque isso pode ser usado por um cache de queries SQL pré-processadas que normalmente os bancos de dados têm. Aí o banco economiza tempo porque não precisa efetuar o parse do SQL nem refazer o plano de execução.

Mas nesse caso a validação da query fica a encargo do driver também ? Se for isso então isso tudo quem deve ser responsável é o Driver e não o banco ?
Normalmente o driver não valida queries; quem deve fazer isso é o banco.

Isso depende do driver e do banco é claro; dependendo do banco não é uma “grande sequência de queries” e sim uma outra coisa. É por isso que tais coisas não são precisamente definidas na documentação, para dar liberdade ao programador do driver e do banco para implementarem isso da melhor maneira possível.

Normalmente é algo entre só criar a conexão e repassar as queries (drivers mais ingênuos) e efetuar alguma otimização que seja possível fazer (drivers mais complexos). Mas existem certas otimizações que só o banco pode fazer.

Pode corrigir seu inglês? Plural de string = strings (não string’s), query = queries (não query’s).

R

Uhm Valeu. Muito Obrigado.

Irei Melhora-lo sim.

E existe algum local com esta documentação ? alem da API java.

peczenyj

O Driver existe pq vc não precisa conhecer o protocolo do banco, e o protocolo do banco não é SQL (talvez exista alguma exceção).

Sem ele vc teria que abrir um socket e controlar a conexão na mão, saber o que cada codigo de retorno significa, etc. E tudo o que aprendesse pro MySQL vc teria que reaprender para lidar com o PostgreSQL, Oracle ou DB2.

Criado 19 de março de 2009
Ultima resposta 20 de mar. de 2009
Respostas 3
Participantes 3